在spring security中配置refer url redirect

时间:2018-01-10 19:18:03

标签: spring redirect spring-security

我正在使用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以便我可以使用它?

0 个答案:

没有答案