Spring Security SWF:如何根据某些条件重定向到不同的流

时间:2014-05-25 08:42:49

标签: spring spring-security spring-webflow

我正在使用弹簧安全装置和弹簧网流。问题是我需要在记录期间根据某些条件将用户重定向到两个不同的页面。

如果用户是第一次登录用户,他将被重定向到firstTimeuser.jsp,否则他将被重定向到homepage.jsp。

在db方面,我有一个字段IS_FIRST_TIME_USER,对于初次使用的用户都是如此。 所以在我的LOGIN表中我有id,username,password,IS_FIRST_TIME_USER字段。

在spring-security.xml中我有

<http auto-config="true">
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login    authentication-success-handler-ref="authenticationSuccessHandler"
                   login-page="/basic"
                   default-target-url="/basic1"
                   authentication-failure-url="/basic?error=true"
                   username-parameter="username"
                   password-parameter="password" />
    <logout logout-success-url="/basic?logout" />
</http>

1 个答案:

答案 0 :(得分:1)

是的,可以通过使用属性authentication-success-handler-ref提供AuthenticationSuccessHandler的自定义实现。

例如,请参阅here

注意:使用此模式时,您不应使用default-target-url

在您的情况下简单实现将类似于下面

@Component("myAuthenticationSuccessHandler")
public class MyAuthenticationSuccessHandler implements AuthenticationSuccessHandler {

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException,    ServletException {          
        if(isFirstTimeLogin(authentication.getName())) {
            response.sendRedirect("/firstTimeuser");                
        } else {
            response.sendRedirect("/homepage");
        }
    }

    private boolean isFirstTimeLogin(String username) {
        //code to access your DAO and figure out whether this is first time login or not
            //Code to access your DAO and update the flag in database
        return true;
    }
}