Spring Security注销
最后修改:2020年8月17日
1.概述
本文构建在我们的表单登录教程重点是如何配置使用Spring安全注销。
进一步阅读:
Spring安全性:使用数据库支持的UserDetailsService进行身份验证
快速指南创建一个自定义的数据库支持的UserDetailsService,用于使用Spring Security进行身份验证。
阅读更多→
2.基本配置
基本配置春天注销功能使用注销()方法很简单:
@Configuration @EnableWebSecurity public class SecSecurityConfig extends WebSecurityConfigurerAdapter {@Override protected void configure(final HttpSecurity http) throws Exception {http //... .logout() //…} / /……}
使用XML配置:
< http >…<注销/ > < / http >
元素启用默认注销机制——它被配置为使用以下内容注销url:/注销这曾经是/ j_spring_security_logout之前Spring Security 4。
3.JSP和注销链接
继续这个简单的例子,提供一个注销链接在web应用程序中是:
< % @ taglib前缀= " c " uri = " http://java.sun.com/jsp/jstl/core " % > < html > <头> < /头> <身体> < a href = " < c: url值= " /注销" / > " >注销< / > < /身体> < / html >
4.高级定制
4.1。logoutSuccessUrl ()
成功执行注销过程后,Spring Security将把用户重定向到指定的页面。默认情况下,这是根页面(“/”)但这是可配置的:
/ /…….logout () .logoutSuccessUrl (" / afterlogout.html ") / /……
这也可以使用XML配置:
<注销logout-success-url = " / afterlogout.html " / >
根据应用程序的不同,一个好的做法是将用户重定向回登录页面:
/ /…….logout () .logoutSuccessUrl (" / login.html ") / /……
4.2。logoutUrl ()
与Spring Security中的其他默认值类似,实际触发注销机制的URL也有一个默认值-/注销。
然而,改变这个默认值是一个好主意,以确保没有发布关于使用什么框架来保护应用程序的信息:金宝搏官网188be
.logout () .logoutUrl(“/ perform_logout”)
并通过XML:
4.3。invalidateHttpSession和deleteCookies
这两个高级属性控制会话失效,以及用户注销时要删除的cookie列表。因此,invalidateHttpSession允许建立会话,以便在登出时它不会失效(它是真正的默认情况下)。
的deleteCookies方法也很简单:
.logout() .logoutUrl("/perform_logout") .invalidateHttpSession(true) .deleteCookies("JSESSIONID")
和XML版本:
4.4。logoutSuccessHandler ()
对于更高级的场景,其中的名称空间不够灵活,可以使用LogoutSuccessHandlerSpring上下文中的bean可以被自定义引用替换:
@Bean public LogoutSuccessHandler(){返回新的CustomLogoutSuccessHandler();} //... .logout() .logoutSuccessHandler();/ /……
等效的XML配置是:
…< bean: bean name = " customUrlLogoutSuccessHandler " / >
任何用户成功注销时需要运行的自定义应用程序逻辑可以通过自定义注销成功处理程序实现。例如-一个简单的审计机制,跟踪用户在触发注销时所处的最后一页:
public class CustomLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler {@Autowired private AuditService AuditService;@Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication Authentication) throws IOException, ServletException {String refererUrl = request. getheader ("Referer");auditService。track("Logout from: " + refererUrl);超级。onLogoutSuccess(请求、响应身份验证);}}
另外,请记住,这个自定义bean有责任确定用户注销后的目的地。因为这个,对logoutSuccessHandler属性与logoutSuccessUrl不会起作用,因为两者都包含类似的功能。
5.结论
在本例中,我们首先使用Spring Security设置一个简单的注销示例,然后讨论可用的更高级选项。
这个春季注销教程的实现可以在GitHub项目-这是一个基于eclipse的项目,所以它应该很容易导入和运行。
当项目在本地运行时,示例HTML可以在以下地址访问:
http://localhost:8080/spring-security-mvc-login/login.html