我正在使用Spring Security,我正在尝试在登录后重定向到页面。如果我退出了,并转到/ myurl / home,我被正确地重定向到登录页面。但是当我登录时,我被重定向到默认URL,而不是/ myurl / home。
我已经创建了SavedRequestAwareAuthenticationSuccessHandler的子类,我想要做的是如果标题中有引用,那么去那里,否则转到我可以设置的默认URL。这是代码:
public class MySuccessRedirectHandler extends SavedRequestAwareAuthenticationSuccessHandler {
static final Logger logger = LoggerFactory.getLogger(MySuccessRedirectHandler.class);
private String defaultRedirectUrl;
public MySuccessRedirectHandler(String defaultRedirectUrl) {
this.defaultRedirectUrl = defaultRedirectUrl;
this.setUseReferer(true);
}
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException {
String url = (String)request.getSession().getAttribute("referer");
logger.debug("Referer URL from session:"+url);
if (url == null) {
response.sendRedirect(defaultRedirectUrl);
} else {
response.sendRedirect(url);
}
}
}
我的配置如下:
http.authorizeRequests().anyRequest()
// now start login info
.authenticated().and().csrf().disable().formLogin()
.successHandler(new MySuccessRedirectHandler("/home"))
.loginProcessingUrl("/j_spring_security_check")
.usernameParameter("j_username")
.passwordParameter("j_password")
.loginPage("/login").failureUrl("/login?error=true").and()
// now start logoff info
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login").and().exceptionHandling();
但是,每次登录时,我都会获得null参考。如何获取引荐URL以便我可以使用它?