【微服务|Spring Security⑰】spring security退出

Spring security默认实现了logout退出,访问/logout,果然不出所料,退出功能Spring也替我们做好了。

点击"Log Out”退出成功。

退出后访问其它url判断是否成功退出。

这里也可以自定义退出成功的页面:

在WebSecurityConfig的protected void configure(HttpSecurity http)中配置:

.and()
	.logout()
	.logoutUrl("/logout")
	.logoutSuccessUrl("/login-view?logout");

当退出操作出发时,将发生:

  • 使HTTP Session 无效
  • 清除 SecurityContextHolder 路径转到 /login-view?logout

但是,类似于配置登录功能,咱们可以进一步自定义退出功能:

@Override
protected void configure(HttpSecurity http) throws Exception {
    
    
http
.authorizeRequests()
//...
.and()
	.logout()	(1)
	.logoutUrl("/logout")	(2)
	.logoutSuccessUrl("/login-viewPlogout")	(3)
	.logoutSuccessHandler(logoutSuccessHandler)	(4)
	.addLogoutHandler(logoutHandler)	(5)
	.invalidateHttpSession(true);	(6)
}

(1 )提供系统退出支持,使用WebSecurityConfigurerAdapter会自动被应用。

(2 )设置触发退出操作的URL (默认是/logout )。

(3 )退出之后跳转的URL,默认是/login?logout。

(4 )定制的LogoutSuccessHandler ,用于实现用户退出成功时的处理。如果指定了这个选项那么 logoutSuccessUrl()的设置会被忽略。

(5 )添加一个LogoutHandler ,用于实现用户退出时的清理工作.默认SecuritycontextLogoutHandler会被添加为—个 LogoutHandler。

(6 )指定是否在退出时让HttpSession无效。默认设置为true。 注意:如果让logout在GET请求下生效,必须关闭防止CSRF攻击csrf().disable()。如果开启了CSRF ,必须使用
post方式请求/logout

logoutHandler :

一般来说,LogoutHandler的实现类被用来执行必要的清理,因而他们不应该抛出异常。 下面是Spring Security提供的一些实现:

  • PersistentTokenBasedRememberMeServices 基于持久化token的RememberMe功能的相关清理
  • TokenBasedRememberMeService 基于token的RememberMe功能的相关清理
  • CookieClearingLogoutHandler 退出时Cookie的相关清理
  • CsrfLogoutHandler 负责在退出时移除csrfToken
  • SecurityContextLogoutHandler 退出时Securitycontext的相关清理 链式API提供了调用相应的LogoutHandler实现的快捷方式,比如deleteCookies().

猜你喜欢

转载自blog.csdn.net/CSDN_SAVIOR/article/details/125683408