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特性的更多相关文章

  1. SPRING SECURITY JAVA配置:Web Security

    在前一篇,我已经介绍了Spring Security Java配置,也概括的介绍了一下这个项目方方面面.在这篇文章中,我们来看一看一个简单的基于web security配置的例子.之后我们再来作更多的 ...

  2. Spring Security研究(1)

      1, 获取Spring Security的Jar包 :从Spring网站下载页下载或者从Maven中央仓库下载.一个好办法是参考实例应用中包含的依赖库. 2,项目模块: Core - spring ...

  3. 使用 Spring Security 保护 Web 应用的安全

    安全一直是 Web 应用开发中非常重要的一个方面.从安全的角度来说,需要考虑用户认证和授权两个方面.为 Web 应用增加安全方面的能力并非一件简单的事情,需要考虑不同的认证和授权机制.Spring S ...

  4. Spring Security 4 新增特性

    1.概述 a) 特性 以下是Spring Security 4.0的新特性 Web Socket 支持 测试支持 整合Spring Data CSRF令牌参数解析 更安全的默认设置 role权限不再必 ...

  5. web应用安全框架选型:Spring Security与Apache Shiro

    一. SpringSecurity 框架简介 官网:https://projects.spring.io/spring-security/ 源代码: https://github.com/spring ...

  6. Spring Security Web应用入门环境搭建

    在使用Spring Security配置Web应用之前,首先要准备一个基于Maven的Spring框架创建的Web应用(Spring MVC不是必须的),本文的内容都是基于这个前提下的. pom.xm ...

  7. Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】

    源码请移步至:https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc 版 ...

  8. SpringMVC 3.1集成Spring Security 3.1

    这篇算是一个入门文章,昨天看见有网友提问,spring mvc集成spring security 的时候出错,揣测了一下问题木有解决.我就帮忙给搭建了一个集成框架他说可以,他告诉我这样的文章网上少.今 ...

  9. Spring Security(09)——Filter

    目录 1.1     Filter顺序 1.2     添加Filter到FilterChain 1.3     DelegatingFilterProxy 1.4     FilterChainPr ...

随机推荐

  1. 【Ubuntu16.04】 install nginx

    1. Download PGP key in order to pass the authentication of the nginx repository signature. click to ...

  2. Git 初学

    记录git与远成仓库建立连接日志 gitbub上创建远程仓库 https://github.com/ 创建登陆账号进入主页 , 选择右上角的加号 新建rep Repository name 为你创建的 ...

  3. 如何使用 flannel host-gw backend?- 每天5分钟玩转 Docker 容器技术(62)

    flannel 支持多种 backend,前面我们讨论的是 vxlan,host-gw 是 flannel 的另一个 backend,本节会将前面的 vxlan backend 切换成 host-gw ...

  4. LaTeX的表格插入与排版

    关于LaTex中的图表问题的几篇有用的文章 Graphics and Colour with LaTeX  有关在LaTex中插图和使用颜色的在线指导. Figure'ing and Picture' ...

  5. JavaScript操作DOM节点

    DOM (文档对象模型(Document Object Model)) 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网 ...

  6. React 实现一个漂亮的 Table

    概述 对于企业级后台产品来说,Table 应该是使用最频繁的组件了,它通常比 Form 和 Chart 的使用还频繁.对于这么一个常用的组件,我们决定要把它从 RSuite 中单独出来开发,并且要具有 ...

  7. MyBatis框架——动态SQL、缓存机制、逆向工程

    MyBatis框架--动态SQL.缓存机制.逆向工程 一.Dynamic SQL 为什么需要动态SQL?有时候需要根据实际传入的参数来动态的拼接SQL语句.最常用的就是:where和if标签 1.参考 ...

  8. SQL查询语句分类

    SQL查询语句有多种,下面总结下.首先先建三张表用于后面的实验 -- 学生表,记录学生信息 CREATE TABLE student( sno ), sname ), ssex ENUM('男','女 ...

  9. 原创: rsync软件服务利用ansible实现一键化部署

    ---恢复内容开始--- 首先创建一个脚本文件 /server/tools/peizhi.sh cat  /server/tools/peizhi.sh cat >>/etc/rsyncd ...

  10. SVN 通过IIS设置反向代理访问

    原因 一个字,穷,没办法,只有一台机器 要当测试服务器还要做源码管理. 解决办法 通过IIS配置反向代理访问SVN,给SVN访问的HTTPS绑定上域名,就可以正常访问了. 1.修改SVN配置 把SVN ...