spring security 1

首先咱们为Spring Security专门创建一个Spring的配置文件,该文件就专门用来做为Spring Security的配置。使用Spring Security咱们须要引入Spring Security的NameSpace。web

<beans xmlns="http://www.springframework.org/schema/beans"正则表达式

  xmlns:security="http://www.springframework.org/schema/security"spring

  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.1.xsd安全

          http://www.springframework.org/schema/securityapp

          http://www.springframework.org/schema/security/spring-security-3.1.xsd">框架

       

</beans>ide

 

       Spring Security命名空间的引入能够简化咱们的开发,它涵盖了大部分Spring Security经常使用的功能。它的设计是基于框架内大范围的依赖的,能够被划分为如下几块。url

  • Web/Http 安全:这是最复杂的部分。经过创建filter和相关的service bean来实现框架的认证机制。当访问受保护的URL时会将用户引入登陆界面或者是错误提示界面。
  • 业务对象或者方法的安全:控制方法访问权限的。
  • AuthenticationManager:处理来自于框架其余部分的认证请求。
  • AccessDecisionManager:为Web或方法的安全提供访问决策。会注册一个默认的,可是咱们也能够经过普通bean注册的方式使用自定义的AccessDecisionManager。
  • AuthenticationProvider:AuthenticationManager是经过它来认证用户的。
  • UserDetailsService:跟AuthenticationProvider关系密切,用来获取用户信息的。

 

       引入了Spring Security的NameSpace以后咱们就可使用该命名空间下的元素来配置Spring Security了。首先咱们来定义一个http元素,security只是咱们使用命名空间的一个前缀。http元素是用于定义Web相关权限控制的。

   <security:http auto-config="true">

      <security:intercept-url pattern="/**" access="ROLE_USER"/>

   </security:http> 

 

       如上定义中,intercept-url定义了一个权限控制的规则。pattern属性表示咱们将对哪些url进行权限控制,其也能够是一个正则表达式,如上的写法表示咱们将对全部的URL进行权限控制;access属性表示在请求对应的URL时须要什么权限,默认配置时它应该是一个以逗号分隔的角色列表,请求的用户只需拥有其中的一个角色就能成功访问对应的URL。这里的“ROLE_USER”表示请求的用户应当具备ROLE_USER角色。“ROLE_”前缀是一个提示Spring使用基于角色的检查的标记。

       有了权限控制的规则了后,接下来咱们须要定义一个AuthenticationManager用于认证。咱们先来看以下定义:

   <security:authentication-manager>

      <security:authentication-provider>

         <security:user-service>

            <security:user name="user" password="user" authorities="ROLE_USER"/>

            <security:user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN"/>

         </security:user-service>

      </security:authentication-provider>

   </security:authentication-manager>

 

       authentication-manager元素指定了一个AuthenticationManager,其须要一个AuthenticationProvider(对应authentication-provider元素)来进行真正的认证,默认状况下authentication-provider对应一个DaoAuthenticationProvider,其须要UserDetailsService(对应user-service元素)来获取用户信息UserDetails(对应user元素)。这里咱们只是简单的使用user元素来定义用户,而实际应用中这些信息一般都是须要从数据库等地方获取的,这个将放到后续再讲。咱们能够看到经过user元素咱们能够指定user对应的用户名、密码和拥有的权限。user-service还支持经过properties文件来指定用户信息,如:

   <security:user-service properties="/WEB-INF/config/users.properties"/>

       其中属性文件应遵循以下格式:

username=password,grantedAuthority[,grantedAuthority][,enabled|disabled]

       因此,对应上面的配置文件,咱们的users.properties文件的内容应该以下所示:

#username=password,grantedAuthority[,grantedAuthority][,enabled|disabled]

user=user,ROLE_USER

admin=admin,ROLE_USER,ROLE_ADMIN

 

       至此,咱们的Spring 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.1.xsd

          http://www.springframework.org/schema/security

          http://www.springframework.org/schema/security/spring-security-3.1.xsd">

 

   <security:http auto-config="true">

      <security:intercept-url pattern="/**" access="ROLE_USER"/>

   </security:http>    

  

   <security:authentication-manager>

      <security:authentication-provider>

         <security:user-service>

            <security:user name="user" password="user" authorities="ROLE_USER"/>

            <security:user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN"/>

         </security:user-service>

      </security:authentication-provider>

   </security:authentication-manager>

       

</beans>

 

       以后咱们告诉Spring加载这个配置文件。一般,咱们能够在web.xml文件中经过context-param把它指定为Spring的初始配置文件,也能够在对应Spring的初始配置文件中引入它。这里咱们采用前者。

   <context-param>

      <param-name>contextConfigLocation</param-name>

   <param-value>/WEB-INF/config/applicationContext.xml,/WEB-INF/config/spring-security.xml</param-value>

   </context-param>

  

   <listener>

   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

   </listener>

 

       Spring的配置文件是经过对应的ContextLoaderListener来加载和初始化的,上述代码中的applicationContext.xml文件就是对应的Spring的配置文件,若是没有能够不用配置。接下来咱们还须要在web.xml中定义一个filter用来拦截须要交给Spring Security处理的请求,须要注意的是该filter必定要定义在其它如SpringMVC等拦截请求以前。这里咱们将拦截全部的请求,具体作法以下所示:

   <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.xml文件中配置好了全部的请求都须要“ROLE_USER”权限,因此当咱们在请求主页的时候,Spring Security发现咱们尚未登陆,Spring会引导咱们到登陆界面。使用正确的用户名和密码(如上面配置的user/user或admin/admin)登陆后,若是符合对应的权限咱们就能够访问主页了,不然将出现403(禁止访问)界面。

       可能你会奇怪,咱们没有创建上面的登陆页面,为何Spring Security会跳到上面的登陆页面呢?这是咱们设置http的auto-config=”true”时Spring Security自动为咱们生成的。

       当指定http元素的auto-config=”true”时,就至关于以下内容的简写。

   <security:http>

      <security:form-login/>

      <security:http-basic/>

      <security:logout/>

   </security:http>

       这些元素负责创建表单登陆、基本的认证和登出处理。它们均可以经过指定对应的属性来改变它们的行为。

相关文章
相关标签/搜索