ユーザーが資格情報を変更/更新できるように、REST APIエンドポイントを作成したいと考えています。 新しいパスワードをCustomUsersCredentialsに追加するか、良いアイデアか悪い考えですか?
私は
はCustomUserDetailsを持っている:@Entity
@Table(name="ACCOUNT_USER")
public class CustomUserDetails implements UserDetails {
private static final long serialVersionUID = 1L;
@Id
@NotBlank
@Column(name = "USERNAME", unique=true)
private String username;
@NotBlank
@Column(name = "PASSWORD")
private String password;
@Column(name = "LOCKED")
private boolean locked;
@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(name = "USER_ROLE",
joinColumns = @JoinColumn(name = "USER_ID"),
inverseJoinColumns = @JoinColumn(name = "ROLE_ID"))
private Set<CustomRole> roles;
public CustomUserDetails(String username, String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<GrantedAuthority> authorities) {
this.setUsername(username);
this.setPassword(password);
this.roles = new HashSet<CustomRole>();
for (GrantedAuthority authority: authorities) {
roles.add(new CustomRole(authority.getAuthority()));
}
}
public CustomUserDetails() { // jpa only
}
//setters and getters
}
レストコントローラは次のようになります。あなたが見ることができるように
@SuppressWarnings("rawtypes")
@RequestMapping(value = "/singup", method = RequestMethod.PUT)
public ResponseEntity updateCredentials(@RequestBody CustomUserDetails user, HttpServletResponse response) throws IOException {
logger.debug("Attempting credentials update " + user.getUsername());
try {
authenticateUserAndSetSession(user, response);
} catch(BadCredentialsException ex) {
return SecurityUtils.createCustomResponseEntity(CustomStatusCode.BAD_CREDENTIALS);
}
customUserDetailsService.update(user, newPassword); // where to add this newPassword ?
return SecurityUtils.createCustomResponseEntity(CustomStatusCode.OK);
}
は、NOP CustomUserDetailsためnewPassword
のフィールドがあります。
このフィールドをこのオブジェクトに追加することは理にかなっていますか?他の選択肢は何ですか?この場合のベストプラクティスは何ですか?
でフィールドを更新する場合ハッシング後、私は春のセキュリティの観点から答えを持っていないが、文字列にパスワードを格納するために避けるべきですセキュリティの理由。 char配列を使うか、どのオブジェクトにもそれを持たない方が良いです。 http://stackoverflow.com/questions/8881291/why-is-char-preferred-over-string-for-passwords – tima