私はSpring Securityにログインした後、アクション必須画面を実装しようとしていますか?私はフォームを完了するためにユーザーが実行しなければならない要件があります(パスワードの変更、利用規約の受け入れなど)。ユーザーがそのアクションを完了すると、彼はアプリケーションの残りの部分を使用できます。私は、Springセキュリティフローを使用するログイン画面で、Spring OAuth2を使用しています。ログイン後の春のセキュリティと対応
これまで私はSavedRequestAwareAuthenticationSuccessHandler
のカスタム実装を持つhttp.formLogin().successHandler()
を使用しようとしましたが、これはユーザーに必要なアクションがあるかどうかを検出し、フォームを記入できるときにユーザーをページにリダイレクトしますが、そのページから移動すると、彼はアプリにログインし、フォームをスキップすることなく使用することができます。しかし、私がやろうとしているのは、アクション要求フォームが完了するまで、ユーザーがセッションを確立できないようにすることです。ユーザーが完全にログインすると自動的にログインする必要があります(たとえば、利用規約に同意する必要がある場合は、2回目のパスワードを入力せずにログインする必要があります)。
ここにコードがあります遠くカスタムハンドラ:
public class CustomLoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
@Autowired
UserService userService;
public final static String TARGET_URL_SESSION_ATTR_NAME = "target-url";
public CustomLoginSuccessHandler(String defaultTargetUrl) {
setDefaultTargetUrl(defaultTargetUrl);
}
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException {
HttpSession session = request.getSession();
AuthorityUser authorityUser = (AuthorityUser)authentication.getPrincipal();
String userId = authorityUser.getUserId();
User u = userService.getById(userId);
Boolean changeRequiredDob = u.getChangeRequiredDob();
Boolean changeRequiredPwd = u.getChangeRequiredPwd();
Boolean changeRequiredTou = u.getChangeRequiredTou();
if(changeRequiredDob || changeRequiredPwd || changeRequiredTou){
String targetUrl = determineTargetUrl(request, response);
session.setAttribute(TARGET_URL_SESSION_ATTR_NAME, targetUrl);
getRedirectStrategy().sendRedirect(request, response, "/action-required");
} else {
super.onAuthenticationSuccess(request, response, authentication);
}
}
}
そして、それは私がセッションに格納されていたTARGET_URL_SESSION_ATTR_NAME
にユーザーをリダイレクトしています正常に完了したら。
確立されたセッション中にユーザーが必要なアクションを検出してリダイレクトする方法を知っておくと便利です(ユーザーがログインした後で、管理者がログインしているときにアカウントで必要なアクションフラグが設定されている場合)。
通常のフィルタ(/にマップされている)にこのロジックを実装すると、a)ユーザーはそれから離れてナビゲートできなくなり、b)ユーザーは自動的に「ログイン」するか、むしろ通過した。あなたが実装する必要があるかもしれない追加だけが、成功のための適切なリダイレクトです。 – chimmi
すぐにセッションを作成したくないという実際の理由はありますか? – chimmi