首先咱们为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
引入了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>
这些元素负责创建表单登陆、基本的认证和登出处理。它们均可以经过指定对应的属性来改变它们的行为。