今天弄了下springsecurity,版本是3.2的,设计了7表,也就是通常的用户、角色、权限、资源,和网上那一大堆配置差不多,唯独权限表我是用AUTH_来命名的,xxxSecurityMetadataSource如下:
[code="java"]
List authList = this.authoritiesMapper.findAll();
if (authList != null && !authList.isEmpty()) {
Map map = new HashMap();
for (Authorities auth : authList) {
ConfigAttribute configAttribute = new SecurityConfig(auth.getAuthority_code());//这里是AUTH_,不是ROLE_
[/code]
在userdetailService里面也是用的AUTH_ 将权限放到了userDetails里面。
现有如下权限与资源关系
user1--ROLE1---AUTH_1------------------>资源1
user1--ROLE1---AUTH_1------------------>资源2
user2--ROLE1---AUTH_2------------------>资源1
用user2去访问资源2居然会抛出 没有权限的AccessDeniedException。不是说权限都要用ROLE_开头么,这是怎么回事,
下面是我的spring_security.xml配置
[code="xml"]
<access-denied-handler error-page="/403"/>
<intercept-url pattern="/**" access="isAuthenticated()" />
<form-login login-page="/login" default-target-url="/welcome"
authentication-failure-url="/loginfailed" always-use-default-target="true"/>
<session-management>
<concurrency-control max-sessions="1" expired-url="/login"/>
</session-management>
<logout logout-success-url="/logout" invalidate-session="true" logout-url="/j_spring_security_logout"/>
<custom-filter ref="mySecurityFilter" before="FILTER_SECURITY_INTERCEPTOR"/>
</http>
[/code]