我们正在使用spring security构建一个Web应用程序来保护我们的应用程序,但是当userpassword过期时我们在设置逻辑时遇到了一些问题。我们尝试的逻辑是
UserDetailsService
中的用户角色CredentialsExpiredException
,则重定向到密码重置页面。我们已经配置了WebSecurityConfigurerAdapter
public class AuthConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login.jsp").permitAll()
.antMatchers("/my/**").hasRole("CHANGEPASS")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login.jsp")
.usernameParameter("username")
.passwordParameter("password")
.failureHandler(exceptionMappingAuthenticationFailureHandler())
}
}
并在 exceptionMappingAuthenticationFailureHandler
中我们将CredentialsExpiredException
网址配置为my / changepass。
我们还设置UserDetailsService
如果我们发现密码已过期,则为用户分配一个新角色“CHANGEPASS”
public class CustomUserDetailsService implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
SystemUser su = userService.getUser(username);
...
if (passExpired) {
String roles = su.getRole();
if (!roles.contains("CHANGEPASS")) {
roles = roles + ",ROLE_CHANGEPASS";
su.setRole(roles);
userService.updateUser(su);
}
}
return new User(username, su.getPassword(), true, true,
}
根据服务器的请求日志,我们看到CredentialsExpiredException
发生时,请求被重定向到我的/ changepass页面,但是它被重定向到登录页面
是否有任何方式在CredentialsExpiredException
发生时访问更改传递页面。