Spring Security研究(2)-高级web特性
1, 添加 HTTP/HTTPS 信道安全
<http> <intercept-url pattern="/secure/**" access="ROLE_USER" requires-channel="https"/> <intercept-url pattern="/**" access="ROLE_USER" requires-channel="any"/> </http>
使用了这个配置以后,如果用户通过 HTTP 尝试访问"/secure/**"匹配的网址,他们会先被重定向到 HTTPS 网址下。 可用的选项有"http", "https" 或 "any"。 使用"any"意味着使用 HTTP 或 HTTPS 都可以。
如果你的程序使用的不是 HTTP 或 HTTPS 的标准端口,你可以用下面的方式指定端口
<http> ... <port-mappings> <port-mapping http="9080" https="9443"/> </port-mappings> </http>
2,会话管理
1)检测超时
你可以配置 Spring Security 检测失效的 session ID, 并把用户转发到对应的 URL。这可以通过 session-management 元素配置:
<http> ... <session-management invalid-session-url="/sessionTimeout.htm" /> </http>
2)同步会话控制
如果你希望限制单个用户只能登录到你的程序一次, Spring Security 通过添加下面简单的部分支持这个功能。 首先,你需要把下面的监听器添加到你的 web.xml 文件里,让 Spring Security 获得 session 生存周期事件:
<listener> <listener-class> org.springframework.security.web.session.HttpSessionEventPublisher </listener-class></listener>
然后,在你的 application context 加入如下部分:
<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>
如果你希望使用一个错误页面替代,你可以在 session-management 中添加 session-authentication-error-url 属性。
3)防止 Session 固定攻击
Spring Security 通过在用户登录时,创建一个新session 来防止这个问题。
如果你不需要保护,或者它与其他一些需求冲突,你可以通过使用<http>中的 session-fixation-protection 属性来配置它的行为,它有三个选项
migrateSession - 创建一个新 session,把原来 session 中所有属性复制到新 session 中。这是默认值。
none - 什么也不做,继续使用原来的 session。
newSession - 创建一个新的“干净的”session,不会复制 session 中的数据。
3,对 OpenID 的支持
命名空间支持 OpenID 登录,替代普通的表单登录,或作为一种附加功能,只需要进行简单的修改:
<http> <intercept-url pattern="/**" access="ROLE_USER" /> <openid-login /> </http>
你应该注册一个 OpenID 供应器(比如 myopenid.com),然后把用户信息添加到你的内存<user-service>中:
<user name="http://jimi.hendrix.myopenid.com/" authorities="ROLE_USER" />
1) 属性交换
支持 OpenID 的 属性交换。 作为一个例子,下面的配置会尝试从 OpenID 提供器中获得 email 和全名, 这些会被应用程序使用到:
<openid-login> <attribute-exchange> <openid-attribute name="email" type="http://axschema.org/contact/email" required="true" /> <openid-attribute name="name" type="http://axschema.org/namePerson" /> </attribute-exchange></openid-login>
每个 OpenID 的“type”属性是一个 URI,这是由特定的 schema 决定的, 在这个例子中是 http://axschema.org/。 如果一个属性必须为了成功认证而获取,可以设置required。 确切的 schema 和对属性的支持会依赖于你使用的 OpenID 提供器。属性值作为认证过程的一部分返回, 可以使用下面的代码在后面的过程中获得:
OpenIDAuthenticationToken token = (OpenIDAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); List<OpenIDAttribute> attributes = token.getAttributes();
2) 添加你自己的 filter
标准过滤器假名和顺序
你可以把你自己的过滤器添加到队列中,使用 custom-filter 元素,使用这些名字中的一个,来指定你的过滤器应该出现的位置:
<http> <custom-filter position="FORM_LOGIN_FILTER" ref="myFilter" /> </http> <beans:bean id="myFilter" class="com.mycompany.MySpecialAuthenticationFilter"/>
你还可以使用 after 或 before 属性,如果你想把你的过滤器添加到队列中另一个过滤器的前面或后面。 可以分别在 position 属性使用"FIRST" 或 "LAST"来指定你想让你的过滤器出现在队列元素的前面或后面。
Spring Security研究(2)-高级web特性的更多相关文章
- SPRING SECURITY JAVA配置:Web Security
在前一篇,我已经介绍了Spring Security Java配置,也概括的介绍了一下这个项目方方面面.在这篇文章中,我们来看一看一个简单的基于web security配置的例子.之后我们再来作更多的 ...
- Spring Security研究(1)
1, 获取Spring Security的Jar包 :从Spring网站下载页下载或者从Maven中央仓库下载.一个好办法是参考实例应用中包含的依赖库. 2,项目模块: Core - spring ...
- 使用 Spring Security 保护 Web 应用的安全
安全一直是 Web 应用开发中非常重要的一个方面.从安全的角度来说,需要考虑用户认证和授权两个方面.为 Web 应用增加安全方面的能力并非一件简单的事情,需要考虑不同的认证和授权机制.Spring S ...
- Spring Security 4 新增特性
1.概述 a) 特性 以下是Spring Security 4.0的新特性 Web Socket 支持 测试支持 整合Spring Data CSRF令牌参数解析 更安全的默认设置 role权限不再必 ...
- web应用安全框架选型:Spring Security与Apache Shiro
一. SpringSecurity 框架简介 官网:https://projects.spring.io/spring-security/ 源代码: https://github.com/spring ...
- Spring Security Web应用入门环境搭建
在使用Spring Security配置Web应用之前,首先要准备一个基于Maven的Spring框架创建的Web应用(Spring MVC不是必须的),本文的内容都是基于这个前提下的. pom.xm ...
- Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】
源码请移步至:https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc 版 ...
- SpringMVC 3.1集成Spring Security 3.1
这篇算是一个入门文章,昨天看见有网友提问,spring mvc集成spring security 的时候出错,揣测了一下问题木有解决.我就帮忙给搭建了一个集成框架他说可以,他告诉我这样的文章网上少.今 ...
- Spring Security(09)——Filter
目录 1.1 Filter顺序 1.2 添加Filter到FilterChain 1.3 DelegatingFilterProxy 1.4 FilterChainPr ...
随机推荐
- html&css笔记(1)
本文是在阅读<head first html and css>时记下的一些需要注意的地方. 第3章 浏览器不会显示html文本中的空白符和换行. 标签的属性用来定义一个元素.p53 hre ...
- http基础知识总结
前车之鉴,后车之师. 站在各位前辈的肩膀上学习到很多知识,这里仅做记录,供自己使用 关于HTTP 我们想要打开一个网站,首先是需要往浏览器地址的URL输入框架中输入网址.当敲下回车后,通过http协议 ...
- dnf命令 (常用总结)
DNF是新一代的rpm软件包管理器.他首先出现在 Fedora 18 这个发行版中.而最近,它取代了yum,正式成为 Fedora 22 的包管理器. DNF包管理器克服了YUM包管理器的一些瓶颈,提 ...
- Java 垃圾回收机制(早期版本)
Java 垃圾回收机制在我们普通理解来看,应该视为一种低优先级的后台进程来实现的,其实早期版本的Java虚拟机并非以这种方式实现的. 先从一种很简单的垃圾回收方式开始. 引用计数 引用计数是一种简单但 ...
- 部署和使用kibana
背景 上一篇介绍了在阿里云上部署ES,本文将主要介绍ELK的可视化工具Kibana的部署和使用.主要分为三个步骤来实现最终呈现: 1.导入数据到ES: 2.部署kibana并完成配置: 3.使用kib ...
- SQL查询每个部门工资前三名的员工信息
--通用sql select deptno, ename, sal from emp e1 where ( ) from emp e2 where e2.deptno=e1.deptno and e2 ...
- Java对象的创建
学了很久的java,是时候来一波深入思考了.比如:对象是如何在JVM中创建,并且被使用的.本文主要讲解下new对象的创建过程.要想更深入的了解建议去认认真真的看几遍<深入理解Java虚拟机> ...
- pomelo 安装 windows 下
最近一直在捣鼓这个东西,看着个的先记录下发帖时间, pomelo 现在最新版是2.0 的,和之前的版本的启动时有区别的(命令行)的,可以进pomelo官网去看下基本的信息, 在pomelo官方论坛上的 ...
- Python自学日志_2017/9/05
9月5日今天早晨学习了网易云课程<Python做Web工程师课程>提前预习课程<学会开发静态网页>.轻松的完成了第五节课的两个实战作业--感觉自己这几天的功夫没有白费,总算学会 ...
- Asp.net mvc3的“从客户端中检测到有潜在危险的 Request.Form 值”问题解决
Asp.net mvc3的“从客户端(content_v=\",<p>\n\t<imgalt=\"\" src...\")中检测到有潜在危险的 ...