こんにちはカバル-
私は非常によく似た要件を持っており、あなたとzagyiとライオンの投稿に従いましたが、それでも/loginページの元のリクエストパラメータを失っているようです。
これが私が持っているものです:
public class AuthenticationProcessingFilterEntryPoint extends LoginUrlAuthenticationEntryPoint {
@Override
protected String determineUrlToUseForThisRequest(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) {
String url = super.determineUrlToUseForThisRequest(request, response, exception);
return url + "?" + request.getQueryString();
}
}
protected void configure(final HttpSecurity httpSecurity) throws Exception {
httpSecurity.
formLogin().loginPage("/signIn").permitAll().
and().
authorizeRequests().
antMatchers(managementContextPath + "/**").permitAll().
anyRequest().authenticated().withObjectPostProcessor(objectPostProcessor).
and().
csrf().disable().
contentTypeOptions().
xssProtection().
cacheControl().
httpStrictTransportSecurity().
and().
requestCache().requestCache(new RedisRequestCache(savedRequestRedisTemplate())).
and().
sessionManagement().sessionAuthenticationStrategy(sessionAuthenticationStrategy).
and().
addFilter(new ExceptionTranslationFilter(new AuthenticationProcessingFilterEntryPoint()));
}
AuthenticationProcessingFilterEntryPointがデプロイされていることがわかりますが、ブレークポイントに到達していません。
ドキュメントに基づくと、AuthenticationExceptionまたはAccessDeniedExceptionがある場合にのみこれが開始されるようです。上記の構成では、そのような場合にスプリングが内部でそのような例外をスローするかどうかはわかりません。
さらに、認証が成功したかどうかに関係なく、ランディングページのクエリパラメータを保持したいと思います。
私は成功と失敗のハンドラーを追加しましたが、どれも実行に移されませんでした。
protected void configure(final HttpSecurity httpSecurity) throws Exception {
httpSecurity.
formLogin().
successHandler(new PropogateQueryStringAuthenticationSuccessHandlerImpl()).
failureHandler(new SimpleUrlAuthenticationFailureHandlerImpl(new QueryStringPropagateRedirectStrategy())).
and().
authorizeRequests().
antMatchers(managementContextPath + "/**").permitAll().
anyRequest().authenticated().withObjectPostProcessor(objectPostProcessor).
and().
csrf().disable().
contentTypeOptions().
xssProtection().
cacheControl().
httpStrictTransportSecurity().
and().
requestCache().requestCache(new RedisRequestCache(savedRequestRedisTemplate())).
and().
sessionManagement().sessionAuthenticationStrategy(sessionAuthenticationStrategy);
}
Spring Boot 1.1.6.RELEASEでSpring-Security3.2.4.RELEASEを使用しています(Spring Framework 4.0.7.RELEASEを使用しています)
ありがとう、サン