关于springSecurity的详细配置可以参考官网:Spring Security Reference
这里只对主要的常用配置做下简单的介绍,其实springSecurity的权限配置主要是围绕三个主题:
- 元数据配置(安全拦截目录配置),对应的接口:FilterInvocationSecurityMetadataSource
- 权限判断配置,对应的接口:AccessDecisionManager
- 用户信息鉴权,对应的接口:UserDetailsService
下面介绍下springSecurity主要的两个配置命名空间:<http>和<authentication-manager>
- 登陆/退出登陆,<http>的子节点
其中要注意的一点是login-processing-url的配置指向的地址不能对应项目中的struts或者springMVC配置的地址,这个地址是处理登陆请求的专用地址;<security:form-login login-page="/login.jsp" login-processing-url="/login" default-target-url="/main" username-parameter="uname" password-parameter="pwd" /> <security:logout logout-url="/logout" logout-success-url="/login.jsp"/>
- 配置同一个用户只允许同时登陆一个客户端,<http>的子节点
<listener> <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> </listener>
这两处配置缺一不可<security:session-management invalid-session-url="/login.jsp"> <security:concurrency-control max-sessions="1"></security:concurrency-control> </security:session-management>
- 配置url对应的权限
<security:intercept-url pattern="/login.jsp" access="permitAll" /> <security:intercept-url pattern="/user/list" access="hasAuthority('USER')" /> <security:intercept-url pattern="/admin/list" access="hasAuthority('ADMIN')"/>
其中access可以配置表达式如下:<pre name="code" class="html">
该配置可以使用<http access-decision-manager-ref="accessDecisionImpl">中accessDecisionImpl对应的实现来代替(第二个接口实现)
- <authentication-manager>的配置
该配置主要是指定第三个接口的实现,用来提供登录用户的信息,包括该用户所拥有的权限<security:authentication-manager> <!--2,使用userDetailService来模拟测试数据--> <security:authentication-provider user-service-ref="userService"> <!--1,模拟测试数据 --> <!-- <security:user-service> <security:user name="aaa" authorities="USER,ADMIN" password="123456" /> <security:user name="bbb" authorities="USER" password="123456"/> </security:user-service> --> </security:authentication-provider> </security:authentication-manager>
- 自定义拦截器,<http>的子节点
其中position也可以使用before和after代替,position的可选值如下:<security:custom-filter ref="cusFilter" position="PRE_AUTH_FILTER"/>
其中cusFilter的实现实例如下:
<bean id="cusFilter" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager"/>
<property name="accessDecisionManager" ref="accessDecisionManager" />
<property name="securityMetadataSource" ref="securityMetadataSource"/>
</bean>
authenticationManager对应上面的<authentication-manager>配置