spring 权限控制

1.启动Spring安全管理的配置步骤:

第一步:在web.xml文件中加入下面内容。

首先第一件事情是你需要增加下面的过滤器声明到你的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安全的Web基础架构。你然后准备开始编辑您的应用程序方面的文件Web 安全服务的配置使用<http>元素。

第二步:在applicationContext.xml文件中加入下面的语句

下面是最少的<http>配置

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

这表示,我们的应用程序希望所有的URL在都被保护,而且需要ROLE_USER权限才能访问。

注意这些拦截器<intercept-url>元素定义了针对不同的URL提供了不同的访问要求,如果有多个此类标签的话它的规则是:从上到下,最上面的最先被匹配。

如果想增加一些用户,你能定义一些测试数据在命名空间里。

<authentication-provider>
     <user-service>
       <user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" />
       <user name="bob" password="bobspassword" authorities="ROLE_USER" />
     </user-service>
  </Authentication-provider>

</Authentication-provider>元素创建DaoAuthentication Provider bean<user-service>元素创建一个InMemoryDaoImpl.

上面的配置定义了2个用户及他们的密码和访问规则。它也可以加载用户信息从标准的属性文件properties属性user-service

到这里整个配置结束你可以使用spring-security-samples-tutorial进行测试。

2.分析配置语法:

2.1auto-config标签包含那些内容

属性就如我们上面所使用的,它的简写语法如下:

  <http>
     <intercept-url pattern="/**" access="ROLE_USER" />
     <form-login />
     <anonymous />
     <http-basic />
     <logout />
     <remember-me />
  </http> 

这些元素分别为表单登陆,匿名认证,基础认证,注销处理,和记住我的提供服务。他们各有特点可以用来改变其行为。

auto-config 需要 UserDetailsService

当使用auto-config没有UserDetailsService在你配置文件中将会出现一个错误(例如,如果你使用LDAP认证).这是因为当auto-config=”true”和请求一个使用了UserDetailsService方法(remember-me章节获取更多的信息)认证机制的时候,记住我是自动启动的如果你有一个错误是由丢失UserDetailsService造成的,试着删除auto-config设置(和任何的remember-me有你的设置)

2.2.表单和基础登陆选项

大家可能会怀疑在当你被提示去登陆时登陆表单在哪里,因为我们没有被提到任何的HTMLJSP文件,事实上当我们没有明确的设置URL为登陆页面,Spring 安全管理将自动产生一个。基于这个功能,启动和使用标准值为这个URL处理提交登陆。预设的目标网址的用户将被送到广告等等, 然而,该命名空间提供了充足的支持 ,让您可以自定义这些选项,例如,如果您想提供您自己的登录页面,您可以使用:

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

请注意,您仍然可以使用auto-configForm-login元素只是覆盖默认设置,另外请注意,我们已经增加了额外的intercept-url元素来说明,任何要求除登录页外都被安全过滤器处理。否则,请求将匹配相应的模式/ ** ,这样它就不可能进入登录页面!如果您想去使用基本身份验证,而不是表单登录,然后更改配置。

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

基本身份验证,然后将优先考虑将用于提示登入当用户尝试访问一个受保护资源。表格登入仍然可以在此配置如果你想使用它,例如通过登录表单中嵌入另一个网页。

2.3使用其他的认证提供者

实际上你需要可扩展的用户信息来源和一些名字添加到应用程序中。您最有可能会希望您的用户信息存储在像数据库或LDAP服务器中。如果你有实现了一个自己的spring 安全org.springframework.security.userdetails.UserDetailsService接口的叫做“ myUserDetailsService ”的类在您的应用程序的中,那么你可以这种使用进行注册,这里的user-service-ref=”userDao”后面appfuse提供一个userDao来注册对应的类UserDaoHibernate

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

如果你想使用数据库,你可以使用

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

这里的“ securityDataSource ”DataSource这种bean的名称,它指向一个数据库的标准Spring安全用户数据表。或者,您可以配置一个Spring安全的 JdbcDaoImpl bean和使用user-service-ref属性指向它

2.3.1增加一个密码编码器

往往你的密码资料将使用哈西算法来编码。这里支持<password-encoder>元素。使用SHA编码密码,原始的身份验证提供程序配置就像这个样子

<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> 

或则使用sha编码密码

     <authentication-provider user-service-ref="userDao">
         <password-encoder ref="passwordEncoder"/>
</authentication-provider>
<bean id="passwordEncoder" class="org.springframework.security.providers.encoding.ShaPasswordEncoder"/>

当使用哈希密码,这也是一个不错的主意使用盐的价值,以防止字典攻击,Spring安全支持这一点。理想的,您可能需要为每个用户随机生成的盐值,但您可以使用的任何属性的UserDetails对象它可以加载您UserDetailsService

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

您可以使用一个自定义的密码编码器的bean使用ref属性password-encoder.这应当包含一个bean名称中的应用方面这是一个实例,Spring安全的PasswordEncoder接口

阅读更多

没有更多推荐了,返回首页