私は春のセキュリティが新しく、いくつかのチュートリアルに従ってきましたが、私はロールの構造が実際にどのように機能しているか理解できません。春のセキュリティ設定ロールオン登録
@Entity
@Table(name = "UserProfile", schema = "dbo", catalog = "DevTestTeam")
public class UserProfileEntity implements UserDetails{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private long id;
@Column(name = "enabled", nullable = false)
private boolean enabled;
@NotEmpty(message = "Enter a password.")
@Size(min = 6, max = 15, message = "Password must be between 6 and 15 characters.")
@Column(name = "password", nullable = true, length = 100)
private String password;
@NotEmpty(message = "Enter a username.")
@Size(min = 6, max = 20, message = "Username must be between 6 and 20 characters.")
@Column(name = "username", nullable = true, length = 20, unique = true)
private String username;
@OneToOne
@JoinColumn(name = "role_id")
private RoleEntity role;
public RoleEntity getRole() {
return role;
}
public void setRole(RoleEntity role) {
this.role = role;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
return authorities;
}
と役割の1:新規ユーザーを作成するときに
@Entity
@Table(name = "Role", schema = "dbo", catalog = "DevTestTeam")
public class RoleEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private long id;
@Column(name = "name", nullable = true, length = 255)
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
私の混乱が来る私は2つのテーブル、ユーザのための1つを持っています。 UserProfileEntityオブジェクトに裏付けられた登録フォームがあり、ユーザー名とパスワードが入力されます。それから明らかにsetEnabled()= true(分かりやすくするために、このコードからゲッター/セッターのいくつかを残しました)が簡単です。
私の質問は、データベースに保存するUserProfileEntityをインスタンス化するときの役割を設定する方法です。私のrole_idの外部キーは、整数を取ってRoleテーブルからロールを返すだけですが、インスタンス化するときにこれを表現する方法がわかりません。ロールテーブルにidが1のROLE_USERがあり、インスタンス化するのが簡単だと思うが、私が探している答えが見つからない。その後
RoleEntity roleEntity = roleEntityRepository.findByName("ROLE_USER");
それを永続化する前にUserProfileEntity
からRoleEntity
ことを設定します:
のUserImpl:
@Service
public class UserProfileServiceImpl implements UserProfileService{
@Autowired
private UserProfileDao userDao;
@Override
public UserProfileEntity findByUser(String username) {
return userDao.findByUsername(username);
}
@Override
public List<UserProfileEntity> findAll() {
List<UserProfileEntity> list = userDao.findAll();
return list;
}
@Override
public UserProfileEntity save(UserProfileEntity persisted) {
userDao.save(persisted);
return null;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserProfileEntity user = userDao.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User not found.");
}
return user;
}
}
素晴らしい、アドバイスとさまざまなオプションに感謝します。私は今朝このことに取り組み、私が思いつくことができるものを見ていきます。 –
が参考のために私のImplクラスを追加しました。あなたが示唆しているものにかなり似ています。 –
助けてくれてありがとう、私はあなたが提案した最初の方法を使って終わり、私のRoleEntityにDaoを作った。また、あなたの答えを説明してくれてありがとう、春のセキュリティのこの世界はかなり深いですが、私はそれを今より多く理解しています。 –