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

时间:2017-06-29 14:17:34

标签: java spring spring-security

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

2 个答案:

答案 0 :(得分:2)

使用

SecurityContextHolder.clearContext();

或者

SecurityContextHolder.getContext().setAuthentication(null);

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

答案 1 :(得分:1)

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

@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 Security会自动重定向到登录页面。这就是为什么要重定向到退出.loginPage("/logout"),而不是在退出后重定向到登录页面.logoutSuccessUrl("/login?logout")