1, 获取Spring Security的Jar包 :从Spring网站下载页下载或者从Maven中央仓库下载。一个好办法是参考实例应用中包含的依赖库。

2,项目模块:

  Core - spring-security-core.jar
 包含了核心认证和权限控制类和接口,   运程支持和基本供应 API。使用 Spring Security 所必须的。支持单独运行的应用,   远程客户端,方法(服务层)安全和 JDBC用户供应。
   Web - spring-security-web.jar
  包含过滤器和对应的 web 安全架构代码。任何需要依赖 servlet API 的。   你将需要它,如果你需要 Spring  Security  Web 认证服务和基于 URL 的权限控制。
  Config - spring-security-config.jar
  包含安全命名控制解析代码(因此我们不能直接把它用在你的应用中)。你需要它,如果使用了 Spring  Security  XML 命名控制来进行配置。
   LDAP - spring-security-ldap.jar
  LDAP 认证和实现代码,如果你需要使用 LDAP 认证或管理 LDAP 用户实体就是必须的。
   ACL - spring-security-acl.jar
  处理领域对象 ACL 实现。用来提供安全给特定的领域对象实例,在你的应用中。
      CAS - spring-security-cas-client.jar
  Spring Security 的 CAs 客户端集成。如果你希望使用 Spring Security web 认证整合一个 CAS 单点登录服务器。
   OpenID - spring-security-openid.jar
  OpenID  web 认证 支持 。 用来 认证 用户 ,通 过 一个 外部 的 OpenID 服务。

3, 获取项目源代码

  svn  checkout http://acegisecurity.svn.sourceforge.net/svnroot/acegisecurity/spring-security/trunk/

4,添加 security 命名空间

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"></beans>

你会看到(在示例中)应用,我们通常使用"security"作为默认的命名空间,而不是"beans",这意味着我们可以省略所有 security 命名空间元素的前缀,使上下文更容易阅读。  如果你把应用上下文分割成单独的文件,让你的安全配置都放到其中一个文件里,这样更容易使用这种配置方法。

<b:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:b="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">

5,开始使用安全命名空间配置

  1) 配置 web.xml

<filter>
  <filter-name>springSecurityFilterChain</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

这是为 Spring Security 的 web 机制提供了一个调用钩子。这种情况下 , bean 的名字是"springSecurityFilterChain",这是由命名空间创建的用于处理 web 安全的一个内部的机制。  注意,你不应该自己使用这个 bean 的名字。

  2)编辑 applicationContext 文件 web 安全服务 是使用<http>元素配置的。 最小  <http>配置:

<http auto-config='true'>
  <intercept-url pattern="/**" access="ROLE_USER" />
</http>

这表示,我们要保护应用程序中的所有 URL,只有拥有  ROLE_USER 角色的用户才能访问。

<intercept-url>元素定义了  pattern,用来匹配进入的请求 URL,使用一个 ant 路径语法

access 属性定义了请求匹配了指定模式时的需求。使用默认的配置,  这个一般是一个逗号分隔的角色队列,一个用户中的一个必须被允许访问请求

前缀“ROLE_”表示的是一个用户应该拥有的权限比对。

Spring Security 中的访问控制不限于简单角色的应用(因此,我们使用不同的前缀来区分不同的安全属性)

 Note:
你可以使用多个<intercept-url>元素为不同 URL 的集合定义不同的访问需求,它们会被归入一个有序队列中,每次取出最先匹配的一个元素使用。  所以你必须把期望使用的匹配条件放到最上边。你也可以添加一个 method 属性 来限制匹配一个特定的HTTP  method(GET,  POST,  PUT  等等)。对于一个模式同时定义在定义了 method 和未定义 method 的情况,指定method 的匹配会无视顺序优先被使用。

我们在上面用到的 auto-config 属性,其实是下面这些配置的缩写:

<http>
    <form-login />
    <http-basic />
    <logout />
</http>
<!-- 直接定义一些测试数据-->
    <authentication-manager>
        <!--
        <authentication-provider>元素意味着用户信息将被认证管理用作处理认证请求。
            你可以拥有多个<authentication-provider>元素来定义不同的认证数据
        -->
        <authentication-provider>
            <user-service>
                <!-- 可以从标准的properties文件中读取这些信息-->
                <user  name="jimi"  password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" />
                <user  name="bob"  password="bobspassword" authorities="ROLE_USER" />
            </user-service>
        </authentication-provider>
    </authentication-manager>

6, 表单和基本登录选项

  如果你想实现自己的登录页面,你可以使用

<http auto-config='true'>
    <intercept-url  pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login login-page='/login.jsp'/>
</http>

  依旧可以使用 auto-config。   这个 form-login 元素会覆盖默认的设置

  我们需要添加额外的 intercept-url 元素,指定用来做登录的页面的 URL,这些 URL 应该可以被匿名访问。否则,这些请求会被/**部分拦截,它没法访问到登录页面

  如果你的登录页面是被保护的。 也可能让所有的请求都匹配特定的模式,通过完全的安全过滤器链:
 

<http auto-config='true'>
    <intercept-url pattern="/css/**" filters="none"/>
    <intercept-url pattern="/login.jsp*" filters="none"/>
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login login-page='/login.jsp'/>
</http>

  如果你希望使用基本认证,代替表单登录,可以把配置改为:

<http auto-config='true'>
    <intercept-url pattern="/**" access="ROLE_USER" />
    <http-basic />
</http>

  基本身份认证会被优先用到,在用户尝试访问一个受保护的资源时,用来提示用户登录。在这种配置中,表单登录依然是可用的

设置一个默认的提交登陆目标

如果在进行表单登陆之前,没有试图去访问一个被保护的资源,default-target-url就会起作用。 这是用户登陆后会跳转到的 URL ,默认是 "/" 。你也可以把always-use-default-target 属性配置成"true",这样用户就会一直跳转到这一页(无论登陆是“跳转过来的”还是用户特定进行登陆)。  如果你的系统一直需要用户从首页进入,就可以使用它了,比如:  

<http>
    <intercept-url pattern='/login.htm*' filters='none'/>
    <intercept-url pattern='/**' access='ROLE_USER' />
    <form-login  login-page='/login.htm'  default-target url='/home.htm' always-use-default-target='true' />
</http>

7, 使用其他认证提供器

  多数情况下,你会想把用户信息保存到数据库或者是 LDAP 服务器里

  如果你自定义了一个 Spring Security 的 UserDetailsService 实现,在你的 application  context 中名叫"myUserDetailsService",然后你可以使用下面的验证。

<authentication-manager>
    <authentication-provider user-service-ref='myUserDetailsService'/>
</authentication-manager>

  如果你想用数据库,可以使用下面的方式

<authentication-manager>
    <authentication-provider>
        <jdbc-user-service data-source-ref="securityDataSource"/>
    </authentication-provider>
</authentication-manager>
    

  这里的“securityDataSource”就是  DataSource bean 在 application context 里的名字,它指向了包含着 Spring Security 用户信息的表。

另外,你可以配置一个 Spring Security JdbcDaoImpl bean,使用 user-service-ref 属性指定:

<authentication-manager>
  <authentication-provider user-service-ref='myUserDetailsService'/>
</authentication-manager>
<beans:bean id="myUserDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
<beans:property name="dataSource" ref="dataSource"/>

8,添加一个密码编码器

  你的密码数据通常要使用一种散列算法进行编码。  使用<password-encoder>元素支持这个功能。  使用 SHA 加密密码,原始的认证供应器配置

<authentication-manager>
  <authentication-provider>
    <password-encoder hash="sha"/>
    <user-service>
      <user  name="jimi" password="d7e6351eaa13189a5a3641bab846c8e8c69ba39f" authorities="ROLE_USER, ROLE_ADMIN" />
      <user  name="bob"  password="4e7421b1b8765d8f9406d87e7cc6aa784c4ab97f" authorities="ROLE_USER" />
    </user-service>
  </authentication-provider>
</authentication-manager>

  在使用散列密码时,用盐值防止字典攻击是个好主意,Spring Security 也支持这个功能。 理想情况下,你可能想为每个用户随机生成一个盐值,不过,你可以使用从UserDetailsService 读取出来的 UserDetails 对象中的属性。比如,使用 username属性,你可以这样用:

<password-encoder hash="sha">
    <salt-source user-property="username"/>
</password-encoder>

  你可以通过 password-encoder 的 ref 属性,指定一个自定义的密码编码器 bean。这应该包含 application  context 中一个 bean 的名字,它应该是 Spring  Security 的
PasswordEncoder 接口的一个实例

Spring Security研究(1)的更多相关文章

  1. Spring Security研究(2)-高级web特性

    1, 添加 HTTP/HTTPS 信道安全 <http> <intercept-url pattern="/secure/**" access="ROL ...

  2. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_05-SpringSecurityOauth2研究-搭建认证服务器

    3 Spring Security Oauth2研究 3.1 目标 本项目认证服务基于Spring Security Oauth2进行构建,并在其基础上作了一些扩展,采用JWT令牌机制,并自定 义了用 ...

  3. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_13-SpringSecurityOauth2研究-JWT研究-生成JWT令牌&验证JWT令牌

    生成jwt需要用私钥来签名.在Auth认证服务下创建测试类 创建密钥工厂,构造函数需要的参数 获取私钥 有了私钥就可以生成JWT令牌 使用jwtHelper是spring security里面的类 e ...

  4. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_12-SpringSecurityOauth2研究-JWT研究-生成私钥和公钥

    3.6.3 JWT入门 Spring Security 提供对JWT的支持,本节我们使用Spring Security 提供的JwtHelper来创建JWT令牌,校验JWT令牌 等操作. 3.6.3. ...

  5. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_10-SpringSecurityOauth2研究-校验令牌&刷新令牌

    3.5校验令牌 Spring Security Oauth2提供校验令牌的端点,如下: Get: http://localhost:40400/auth/oauth/check_token?token ...

  6. Spring Security笔记:Remember Me(下次自动登录)

    前一节学习了如何限制登录尝试次数,今天在这个基础上再增加一点新功能:Remember Me. 很多网站,比如博客园,在登录页面就有这个选项,勾选“下次自动登录”后,在一定时间段内,只要不清空浏览器Co ...

  7. spring security之httpSecurity使用示例

    如果在HttpSecurity中配置需要authenticate(),则如果没有登陆,或没有相关权限,则会无法访问 2017-01-02 23:39:32.027 DEBUG 10396 --- [n ...

  8. 【Spring】关于Boot应用中集成Spring Security你必须了解的那些事

    Spring Security Spring Security是Spring社区的一个顶级项目,也是Spring Boot官方推荐使用的Security框架.除了常规的Authentication和A ...

  9. spring security执行流程图

    今天看到非常多人转载了这篇文章,这里备注一下.原文来自CSDN我的博客. 近期在研究spring security的配置,研究了一个星期了,在官网看了下.仅仅配置出来了简单的登录,但不知如何从数据库读 ...

随机推荐

  1. Shrio授权验证详解

    所谓授权,就是控制你是否能访问某个资源,比如说,你可以方位page文件夹下的jsp页面,但是不可以访问page文件夹下的admin文件夹下的jsp页面. 在授权中,有三个核心元素:权限,角色,用户. ...

  2. python+selenium自动化软件测试(第2章):WebDriver API

    2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可 ...

  3. vue.js基础知识篇(6):组件详解

    第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 V ...

  4. 小爬新浪新闻AFCCL

    1.任务目标: 爬取新浪新闻AFCCL的文章:文章标题.时间.来源.内容.评论数等信息. 2.目标网页: http://sports.sina.com.cn/z/AFCCL/ 3.网页分析 4.源代码 ...

  5. WPF DEV实现手风琴效果

    说明 最近用WPF+DevExpress做项目时,需要做一个类似手风琴的效果,效果的界面如下.因为没有现成的控件,需要自定义模板,所以写了一个Demo和大家分享,项目中可以根据实际情况使用.如果你用不 ...

  6. MySQL的JOIN(三):JOIN优化实践之内循环的次数

    这篇博文讲述如何优化内循环的次数.内循环的次数受驱动表的记录数所影响,驱动表记录数越多,内循环就越多,连接效率就越低下,所以尽量用小表驱动大表.先插入测试数据. CREATE TABLE t1 ( i ...

  7. macOS上的ODBC-利用unixODBC连接PostgreSQL与SQLite并进行数据迁移

    安装UnixODBC & PSQLODBC driver for UnixODBC $ brew install psqlodbc Updating Homebrew... ==> In ...

  8. none,hidden和opacity="0"设置元素不可见的区别

    none,hidden和opacity="0"均可设置元素为不可见的状态.其中none属于display的属性值,hidden属于visibility的属性值.使用none时元素不 ...

  9. 交换机的Ethernet Channel

    端口聚合也叫做以太通道(ethernet channel),主要用于交换机之间连接.由于两个交换机之间有多条冗余链路的时候,STP会将其中的几条链路关闭,只保留一条,这样可以避免二层的环 路产生.但是 ...

  10. less和scss

    一.less基础语法 1.声明变量:@变量名:变量值:      使用变量:@变量名; 2.混合(Mixins) 1)无参混合 声明: .class{} 调用:在选择器中,使用.class;直接调用 ...