Spring Security 2.0.5 学习笔记(一) - URL级别权限控制

来源:互联网 发布:网络印刷平台的趋势 编辑:程序博客网 时间:2024/06/05 19:01

一. Spring Security 大概的工作流程以及个人修改

1.web.xml配置需要被Spring Security处理的URL

 这里拦截的是/*,也就是该系统的全部URL请求都拦截。

 

2.Spring容器初始化

配置文件applicationContext.xml, applicationContext-security.xml, applicationContext-systemManagement.xml,.....................

 

3.Spring Security进入过滤器链,也就是经过多个过滤器处理,不同的过滤器负责不同的工作

不同于Spring acegi, 不需要在applicationContext-security.xml手工配置。

 

4.对Spring Security进行功能扩展,加入自定义的过滤器,该过滤器是配置在上述过滤器的最后面,经过上面的过滤器处理,最后进入该过滤器处理

配置文件同样在applicationContext-security.xml

<!--\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\--><!--负责对资源进行认证的Interceptor(实际就是fiter),检查Authentication所授予的权限是否拥有可以访问被访问的url资源。--><beans:bean id="urlResourceSecurityInterceptor"class="org.springframework.security.intercept.web.FilterSecurityInterceptor"><beans:property name="authenticationManager" ref="authenticationManager" /><beans:property name="accessDecisionManager" ref="accessDecisionManager" /><beans:property name="objectDefinitionSource"ref="urlFilterInvocationDefinitionSource" /><beans:property name="observeOncePerRequest" value="false" /><!-- <custom-filter after="LAST" /> --><custom-filter after="FILTER_SECURITY_INTERCEPTOR" /></beans:bean><!--实际上,我们虽然无法替换FilterSecurityInterceptor的默认实现,不过我们可以再实现一个类似的过滤器,并将我们自己的过滤器作为一个customer-filter,加到默认的过滤器链的最后,从而完成整个过滤检查。--><!-- 获取访问被访问的资源所需要的权限(authority),以ConfigAttributeDefinition形式返回 --><beans:bean id="urlFilterInvocationDefinitionSource"class="com.newzhongmei.pmi.aop.aspect.security.DefinitionSource.UrlFilterInvocationDefinitionSource" />



5.在web.xml配置一个自定义的监听器,用于Spring Security,详细请查看该java实现源码

<span style="white-space:pre"></span><listener><span style="white-space:pre"></span><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class><span style="white-space:pre"></span></listener>
<span style="white-space:pre"></span><!--ServletContextLoaderListener是额外添加的监听器,用于Spring Security,详细请查看该实现源码--><listener><listener-class>com.newzhongmei.pmi.aop.aspect.security.listener.ServletContextLoaderListener</listener-class></listener>

ServletContextLoaderListener的主要工作是从数据库中查找所有的URL资源以及和它们相对应的ROLE角色,最后组装到一个Map<String, String>,存放到session里面。

Map<String, String> urlAuthorities = userService.loadUrlAuthorities();servletContext.setAttribute("urlAuthorities", urlAuthorities);





0 0
原创粉丝点击