使用SpringSecurity怎么实现一个退出功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
创新互联公司是一家网站设计公司,集创意、互联网应用、软件技术为一体的创意网站建设服务商,主营产品:成都响应式网站建设公司、成都品牌网站建设、全网整合营销推广。我们专注企业品牌在网站中的整体树立,网络互动的体验,以及在手机等移动端的优质呈现。成都网站制作、网站设计、移动互联产品、网络运营、VI设计、云产品.运维为核心业务。为用户提供一站式解决方案,我们深知市场的竞争激烈,认真对待每位客户,为客户提供赏析悦目的作品,网站的价值服务。一、logout最简及最佳实践
其实使用Spring Security进行logout非常简单,只需要在spring Security配置类配置项上加上这样一行代码:http.logout()。关于spring Security配置类的其他很多实现、如:HttpBasic模式、formLogin模式、自定义登录验证结果、使用权限表达式、session会话管理,在本号的之前的文章已经都写过了。本节的核心内容就是在原有配置的基础上,加上这样一行代码:http.logout()。
@Configuration @EnableWebSecurity public class SecSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(final HttpSecurity http) throws Exception { http.logout(); } }
加上logout配置之后,在你的“退出”按钮上使用/logtou作为请求登出的路径。
退出
logout功能我们就完成了。实际上的核心代码只有两行。
二、默认的logout做了什么?
虽然我们简简单单的实现了logout功能,是不是还不足够放心?我们下面就来看一下Spring Security默认在logout过程中帮我们做了哪些动作。
当前session失效,即:logout的核心需求,session失效就是访问权限的回收。
删除当前用户的 remember-me“记住我”功能信息
clear清除当前的 SecurityContext
重定向到登录页面,loginPage配置项指定的页面
通常对于一个应用来讲,以上动作就是logout功能所需要具备的功能了。
三、个性化配置
虽然Spring Security默认使用了/logout作为退出处理请求路径,登录页面作为退出之后的跳转页面。这符合绝大多数的应用的开发逻辑,但有的时候我们需要一些个性化设置,如下:
http.logout() .logoutUrl("/signout") .logoutSuccessUrl("/aftersignout.html") .deleteCookies("JSESSIONID")
通过指定logoutUrl配置改变退出请求的默认路径,当然html退出按钮的请求url也要修改
通过指定logoutSuccessUrl配置,来显式指定退出之后的跳转页面
还可以使用deleteCookies删除指定的cookie,参数为cookie的名称
四、LogoutSuccessHandler
如果上面的个性化配置,仍然满足不了您的应用需求。可能您的应用需要在logout的时候,做一些特殊动作,比如登录时长计算,清理业务相关的数据等等。你可以通过实现LogoutSuccessHandler 接口来实现你的业务逻辑。
@Component public class MyLogoutSuccessHandler implements LogoutSuccessHandler { @Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { //这里书写你自己的退出业务逻辑 // 重定向到登录页 response.sendRedirect("/login.html"); } }
然后进行配置使其生效,核心代码就是一行logoutSuccessHandler。注意logoutSuccessUrl不要与logoutSuccessHandler一起使用,否则logoutSuccessHandler将失效。
@Configuration @EnableWebSecurity public class SecSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private MyLogoutSuccessHandler myLogoutSuccessHandler; @Override protected void configure(final HttpSecurity http) throws Exception { http.logout() .logoutUrl("/signout") //.logoutSuccessUrl(``"/aftersignout.html"``) .deleteCookies("JSESSIONID") //自定义logoutSuccessHandler .logoutSuccessHandler(myLogoutSuccessHandler); } }
关于使用SpringSecurity怎么实现一个退出功能问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联网站建设公司行业资讯频道了解更多相关知识。
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。