当用户在特定页面上执行一些非常敏感的操作时,有没有办法强制使用Spring安全性进行重新身份验证?
答案 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")