密码过期时使用spring security重置密码

时间:2017-10-24 19:28:30

标签: spring spring-mvc spring-security

我们正在使用spring security构建一个Web应用程序来保护我们的应用程序,但是当userpassword过期时我们在设置逻辑时遇到了一些问题。我们尝试的逻辑是

  1. 密码重置页面仅在用户具有特定角色时才可访问
  2. 在我们发现用户passwd已过期时更新UserDetailsService中的用户角色
  3. 如果引发CredentialsExpiredException,则重定向到密码重置页面。
  4. 我们已经配置了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发生时访问更改传递页面。

0 个答案:

没有答案