我正在使用弹簧安全装置和弹簧网流。问题是我需要在记录期间根据某些条件将用户重定向到两个不同的页面。
如果用户是第一次登录用户,他将被重定向到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>
答案 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;
}
}