某些页面上的 Spring 安全重新身份验证



当用户在特定页面上执行一些非常敏感的操作时,有没有办法强制使用Spring安全性重新进行身份验证?

使用

SecurityContextHolder.clearContext();

SecurityContextHolder.getContext().setAuthentication(null);

HttpSession session = request.getSession(false);
if (session != null) {
  session.invalidate();
}

如果您使用的是基于会话的身份验证。您可以为此目的使用类似的东西:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .rememberMe()
            .and()
            .authorizeRequests()
                .anyRequest().permitAll()
            .and()
            .formLogin()
                .loginPage("/logout")
                .loginProcessingUrl("/j_spring_security_check")
                .defaultSuccessUrl("/my-profile")
                .usernameParameter("username")
                .passwordParameter("password")
                .failureUrl("/login?error")
            .and()
            .logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/login?logout").deleteCookies("JSESSIONID")
                .invalidateHttpSession(true);
}

如果用户不需要,Spring 安全性会自动重定向到登录页面。这就是为什么重定向到注销.loginPage("/logout"),而不是在注销后重定向到登录页面.logoutSuccessUrl("/login?logout")

最新更新