<?xml version="1.0" encoding="UTF-8"?> |
<beans:beans xmlns="http://www.springframework.org/schema/security" |
xmlns:beans="http://www.springframework.org/schema/beans" |
xmlns:context="http://www.springframework.org/schema/context" |
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/context |
http://www.springframework.org/schema/context/spring-context-3.0.xsd |
http://www.springframework.org/schema/security |
http://www.springframework.org/schema/security/spring-security-3.0.xsd"> |
|
<!-- access-denied-page 自定义拒绝页面 --> |
<http auto-config='true' access-denied-page="/accessDenied.jsp"> |
<!-- |
filters='none' spring security不对其进行拦截,任何用户都可以不授权访问 <intercept-url |
pattern='/index.jsp' access="ROLE_ADMIN" /> <intercept-url |
pattern="/**" access="ROLE_USER" /> |
--> |
<!-- 只有拦截后才能使spring security 标签--> |
<intercept-url pattern="/common/**/*.jsp" filters="none" /> |
<intercept-url pattern="/common/**/index-top.jsp" access="ROLE_ADMIN" /> |
<intercept-url pattern='/login.jsp' filters='none' /> |
<!-- 不要过滤图片等静态资源 --> |
<intercept-url pattern="/**/*.jpg" filters="none" /> |
<intercept-url pattern="/**/*.png" filters="none" /> |
<intercept-url pattern="/**/*.gif" filters="none" /> |
<intercept-url pattern="/**/*.css" filters="none" /> |
<intercept-url pattern="/**/*.js" filters="none" /> |
<intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY" /> |
|
|
|
|
<!-- |
<form-login> 登录过滤器; login-page 登录页面(必须在以上拦截链中配置其可对任何人访问,否则不停的拦截跳转); |
authentication-failure-url 登陆失败页面;default-target-url 默认登录成功后转向的页面 |
--> |
<form-login login-page='/login.jsp' |
authentication-failure-url="/login.jsp?error=true" |
default-target-url="/index.jsp" /> |
|
<!-- |
<logout /> 注销过滤器; invalidate-session=true 用户注销,不设置此参数时默认值为true; |
logout-success-url 用户注销后跳转的页面/action(可在此处理回收资源等); |
logout-url="/j_spring_security_logout" |
设置一个特殊的URL以便特定的注销过滤器来捕捉处理,在任何页面中添加一个链接来注销<s:a |
href="j_spring_security_logout"></s:a>. |
不设置此参数默认值为:"/j_spring_security_logout". |
--> |
<!--注销用户--> |
<logout invalidate-session="true" logout-success-url="/login.jsp" |
logout-url="/j_spring_security_logout" /> |
|
<!-- 检测失效的sessionId,超时时定位到另外一个URL --> |
<session-management invalid-session-url="/login.jsp" /> |
|
<!-- |
增加一个自定义filter,与Acegi是不一样的,不能修改默认的filter,这个filter位于FILTER_SECURITY_INTERCEPTOR之前 |
--> |
<custom-filter ref="resourceSecurityInterceptor" before="FILTER_SECURITY_INTERCEPTOR" /> |
</http> |
|
|
|
<!-- 自定义过滤器 --> |
<beans:bean id="resourceSecurityInterceptor" |
class="com.common.springsecurity.customfilter.FilterSecurityInterceptor"> |
<!-- 认证管理器,实现用户认证的入口 --> |
<beans:property name="authenticationManager" ref="MyAuthenticationManager" /> |
<!-- 访问决策器,决定某个用户具有的角色,是否有足够的权限去访问某个资源 --> |
<beans:property name="accessDecisionManager" ref="AccessDecisionManager" /> |
<!-- 资源源数据定义,即定义某一资源可以被哪些角色访问 --> |
<beans:property name="securityMetadataSource" |
ref="InvocationSecurityMetadataSourceService" /> |
<!-- 每次请求都进行检查. 如果设为true,则只第一次检查,默认为true. 注:默认true时,用户访问权限仅拦截一次. |
<beans:property name="observeOncePerRequest" value="false" />--> |
</beans:bean> |
|
<!-- 认证管理器 --> |
<authentication-manager alias="MyAuthenticationManager"> |
<authentication-provider ref="daoAuthenticationProvider"> |
<!-- |
<user-service> |
<user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" /> |
<user name="user" password="user" authorities="ROLE_USER" /> |
</user-service> |
<jdbc-user-service data-source-ref="UserDetailService" /> |
--> |
</authentication-provider> |
</authentication-manager> |
|
<!-- |
访问决策器,决定某个用户具有的角色,是否有足够的权限去访问某个资源 |
,AffirmativeBased表示只要有一个Voter通过权限要求,就可以访问 |
--> |
<beans:bean id="accessDecisionManager" |
class="org.springframework.security.access.vote.AffirmativeBased"> |
<!-- 是否允许所有的投票者弃权,如果为false,表示如果所有的投票者弃权,就禁止访问 --> |
<beans:property name="allowIfAllAbstainDecisions" |
value="false" /> |
<beans:property name="decisionVoters"> |
<beans:list> |
<!-- |
RoleVoter默认角色名称都要以ROLE_开头,否则不会被计入权限控制,如果要修改前缀,可以通过对rolePrefix属性进行修改 |
--> |
<beans:bean class="org.springframework.security.access.vote.RoleVoter" /> |
<beans:bean |
class="org.springframework.security.access.vote.AuthenticatedVoter" /> |
</beans:list> |
</beans:property> |
</beans:bean> |
<!-- 国际化异常信息 --> |
<beans:bean id="messageSource" |
class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> |
<beans:property name="basename" |
value="WEB-INF/log/messages_zh_CN" /> |
</beans:bean> |
|
<!-- DAO认证提供器 |
Spring Security包含了一个产品级别的AuthenticationProvider实现,叫做DaoAuthenticationProvider。 |
这个认证提供器兼容所有生成UsernamePasswordAuthenticationToken的验证机制,它可能是框架里最常用到的提供器。 |
与其他认证提供器一样,DaoAuthenticationProvider通过一个UserDetailsService来获得用户名,密码和GrantedAuthority[]。 |
与其他认证提供器不同的是,这个认证提供器需要获得一个密码,它会根据认证请求对象里的密码来判断认证是否成功。 --> |
<beans:bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider"> |
<beans:property name="userDetailsService" ref="UserDetailService" /> <!-- 必须实现的接口 --> |
<beans:property name="hideUserNotFoundExceptions" value="false"/><!-- 是否隐藏用户没有找到的异常,默认为trye,即将不能准确地报告用户是否存在的异常 --> |
<!-- [可选项] PasswordEncoder为从配置好的UserDetailsService中返回的UserDetails对象里的密码,提供加密功能。 |
SaltSource使用盐值生成密码,这可以提升认证资源密码的安全性。 |
Spring Security支持MD5,SHA和纯文本编码的PasswordEncoder实现。 |
Spring Security提供了两种SaltSource实现:SystemWideSaltSource对所有密码都使用相同的盐值进行编码, |
ReflectionSaltSource,使用返回的UserDetails对象的属性来获得盐值。 |
<beans:property name="saltSource" ref bean="saltSource"/> |
<beans:property name="passwordEncoder" ref="passwordEncoder"/> --> |
</beans:bean> |
</beans:beans> |
Spring Security
最新推荐文章于 2024-09-27 14:04:34 发布