配置
ActiveDirectoryLdapAuthenticationProvider非常简单 。您只需要提供域名和提供服务器地址的LDAP URL 。下面是一个配置示例:
@BeanActiveDirectoryLdapAuthenticationProvider authenticationProvider() {return new ActiveDirectoryLdapAuthenticationProvider("example.com", "ldap://company.example.com/");}
会话管理HTTP会话相关的功能是通过SessionManagementFilter和
SessionAuthenticationStrategy接口的组合来处理的,该接口由过滤器委托给它 。典型的应用包括会话固定保护、攻击预防、会话超时检测和限制通过身份验证的用户可以同时打开的会话数量 。
- 检测超时
protected void configure(HttpSecurity http) {http.sessionManagement().invalidSessionUrl("/invalidSession.htm");}
注意,如果您使用这种机制来检测会话超时,如果用户登出,然后在没有关闭浏览器的情况下重新登录,它可能会错误地报告错误 。这是因为当您使会话失效时,会话cookie不会被清除,即使用户已经注销,它也会被重新提交 。你可以在登出时显式地删除JSESSIONID cookie,例如在登出处理程序中使用以下语法:protected void configure(HttpSecurity http) {http.logout().deleteCookies("JSESSIONID");}
不幸的是,这不能保证对每个servlet容器都适用,所以您需要在您的环境中测试它 。如果您在代理服务器后运行应用程序,您还可以通过配置代理服务器来删除会话cookie 。例如,使用Apache HTTPD的mod_headers,下面的指令会在登出请求的响应中使JSESSIONID过期,从而删除JSESSIONID cookie(假设应用程序部署在路径为 /tutorial下):
<LocationMatch "/tutorial/logout">
Header always set Set-Cookie "JSESSIONID=;Path=/tutorial;Expires=Thu, 01 Jan 1970 00:00:00 GMT"
</LocationMatch>
- 并发会话控制
<listener><listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class></listener>
然后将以下几行添加到你的应用程序上下文中:<http>...<session-management><concurrency-control max-sessions="1" /></session-management></http>
这将防止用户多次登录,第二次登录将导致第一次登录无效 。通常您希望防止第二次登录,在这种情况下您可以使用:<http>...<session-management><concurrency-control max-sessions="1" error-if-maximum-exceeded="true" /></session-management></http>
第二次登录将被拒绝 。通过“拒绝”,我们的意思是,如果使用基于表单的登录,用户将被发送到authentication-failure-url 。如果第二次身份验证是通过另一种非交互机制进行的,比如“remember-me”,一个“unauthorized”(401)错误将被发送给客户端 。如果希望使用错误页面,可以将属性session-authentication-error-url添加到会话管理元素 。
如果您正在为基于表单的登录使用自定义身份验证过滤器,那么您必须显式地配置并发会话控制支持 。
- 会话固定攻击保护
session-fixation-protection属性来控制行为,该属性有四个选项:
- none:不做任何事 。原会话将保留 。
- newSession:创建一个新的“干净”会话,而不复制现有的会话数据(与Spring security相关的属性仍将被复制) 。
- migrateSession:创建一个新会话,并将所有现有会话属性复制到新会话 。这是Servlet 3.0或旧容器的默认设置 。
- changeSessionId:不要创建新的会话 。相反,使用Servlet容器提供的会话固定保护(HttpServletRequest#changeSessionId()) 。这个选项只在Servlet 3.1 (Java EE 7)和更新的容器中可用 。在旧容器中指定它将导致异常 。这是Servlet 3.1和更新容器中的默认值 。
推荐阅读
- 严国华|《罚罪》唐绍文身份曝光,他确实是卧底,但并非听命于严国华
- 肖振邦|《罚罪》仅剩6集!肖振邦的结局注定悲惨,邱涛的真实身份即将暴露
- 浙江卫视|前浙江卫视主持人突然晒娃,曾和杨迪传绯闻,圈外丈夫仍身份成谜
- 李伯东|罚罪:李伯东真实身份曝光,与张秋峰联手上演碟中谍
- 章安仁|《流金岁月》,章安仁或许对蒋南孙有一丝喜欢,更爱的是她的身份
- 赵鹏超|《罚罪》最狠毒之人,为钱抛弃所有亲人,“大王”身份实至名归
- |探秘新钓点鱼影都没见到,却意外钩起一螃蟹,得知身份后高兴坏了
- 陆安然|覆流年:5000两买下的冬青身份不简单,陆安然既送了人情又得忠仆
- |40岁韩国男星染毒被逮!身份被网友找到了!
- 吴镇宇|吴镇宇:坐公交被指责不该坐老人座,无奈掏出身份证,引无限感慨