私はSpringSecurityを初めて使用し、APIとJavadocを読んでいますが、問題に関してサポートが必要だと思います。
これまでのところ、試行錯誤に基づいて、例外をスローすると、認証メソッドがログイン失敗ハンドラーに自動的にリダイレクトするように求められることがわかりました。そこから、失敗した認証のフローを簡単にリダイレクトおよびカスタマイズできました。ただし、正常にログインする場合は、HttpServletRequest、HttpServletResponse、Authenticationオブジェクト以外のログイン成功ハンドラーに何も渡さないようです。
ログインの成功には2つのシナリオがあります。
正常にログインします。
新しいユーザーがログインすると、パスワードの変更ページにリダイレクトされます。
ここにいくつかの質問があります:
この場合、request.setParameter( "status"、 "FOR_CHANGE_PASSWORD")を呼び出しても大丈夫ですか?安全ですか?
「CHANGE_PASSWORD」権限を追加する必要がありますか?これは良い習慣ですか?
私の問題は、LoginAuthenticatorでuserServiceメソッドを呼び出してから、ユーザーのステータスを取得するためだけにLoginSuccessHandlerで再度呼び出すことを望まないことです。回避策はありますか?
public class LoginAuthenticator implements AuthenticationProvider{
private static final Logger log = LoggerFactory.getLogger(LoginAuthenticator.class);
private static final List<GrantedAuthority> AUTHORITIES = new ArrayList<GrantedAuthority>();
@Autowired
UserService userService;
@Override
public Authentication authenticate(Authentication authentication)
throws AuthenticationException {
log.info("Authenticating...");
log.debug("Username: {}" , authentication.getPrincipal());
log.debug("Password: {}" , (String) authentication.getCredentials());
WSResponse response = userService.authenticateLogin(username, password);
//User log-in failure
if(response.getResponseCode != 200){
if(response.getResponseStatus.equals("BAD CREDENTIALS")){
throw new BadCredentialsException("Bad Credentials");
}
else{
throw new AccountStatusException("Account is locked")
}
}
else{
log.info("User credentials are valid... logging in");
AUTHORITIES.add(new SimpleGrantedAuthority("USER"));
return new UsernamePasswordAuthenticationToken(authentication.getPrincipal(), (String) authentication.getCredentials(), AUTHORITIES);
}
}
これ以上の提案は素晴らしいでしょう。