这篇文章主要介绍了Spring security用户URL权限FilterSecurityInterceptor使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
用户通过浏览器发送URL地址,由FilterSecurityInterceptor判断是否具有相应的访问权限。
对于用户请求的方法权限,例如注解@PreAuthorize (“hasRole(管理)”),由MethodSecurityInterceptor判断
两个拦截器都继承了AbstractSecurityInterceptor
代码如下
/* *版权2004、2005、2006 Acegi科技企业有限公司 * *在Apache许可下的,2.0版本(“许可证”); *你可能不使用这个文件除了遵守许可证。 *你可以获得许可证的副本 * * http://www.apache.org/licenses/license - 2.0 * *,除非适用法律要求或书面同意,软件 *在许可证下发布的分布在一个“目前的”基础上, *没有任何形式的保证或条件,明示或默示。 *查看许可证的管理权限和特定的语言 *限制下的许可。 */包org.springframework.security.web.access.intercept; 进口java.io.IOException; 进口javax.servlet.Filter; 进口javax.servlet.FilterChain; 进口javax.servlet.FilterConfig; 进口javax.servlet.ServletException; 与javax . servlet . servletrequest进口; 进口javax.servlet.ServletResponse; 进口org.springframework.security.access.SecurityMetadataSource; 进口org.springframework.security.access.intercept.AbstractSecurityInterceptor; 进口org.springframework.security.access.intercept.InterceptorStatusToken; 进口org.springframework.security.web.FilterInvocation;/* * *执行HTTP资源通过滤波器实现的安全处理。 *通过筛选器实现对HTTP资源的安全处理。 * & lt; p> * & lt; code> SecurityMetadataSource</code>这个安全拦截器所需要的 *类型{@link FilterInvocationSecurityMetadataSource}。 * & lt; p> *安全拦截器所需的SecurityMetadataSource类型是FilterInvocationSecurityMetadataSource * *指{@link AbstractSecurityInterceptor}细节的工作流程。 * & lt;/p> * * @author Ben Alex * @author Rob绞车 */公共类FilterSecurityInterceptor AbstractSecurityInterceptor扩展实现 过滤器{//~静态字段初始值设定项//=====================================================================================私有静态最终字符串FILTER_APPLIED=癬_spring_security_filterSecurityInterceptor_filterApplied”;//~实例字段//================================================================================================/* * * securityMetadataSource中包含了一个HashMap,地图中保存了用户请求的Http.Method和相应的URL地址 *例如春天在引导中,可能是如下的配置,参考图1所示 * securityMetadataSource中的内容,参考图2所示 */私人FilterInvocationSecurityMetadataSource securityMetadataSource; 私人布尔observeOncePerRequest=true;//~方法//========================================================================================================/* * *不习惯(我们依靠IoC容器生命周期服务来代替) * * @param arg0忽略 * * @throws ServletException从不抛出 */公共空init (FilterConfig arg0)抛出ServletException { }/* * *不习惯(我们依靠IoC容器生命周期服务来代替) */公共空间摧毁(){ }/* * *方法,实际上是调用过滤器链。简单的代表 * {@link #调用(FilterInvocation)}的方法。 * * @param请求的servlet请求 * @param响应servlet响应 * @param链过滤器链 * * @throws IOException如果过滤器链失败 * @throws ServletException如果过滤器链失败 * * *通过责任链式调用,执行doFilter方法 * FilterInvocation中保存了滤波器相关的信息,比如请求、响应链 *通过调用方法处理具体的url过滤 */doFilter (ServletRequest公共无效请求,ServletResponse响应, FilterChain链)抛出IOException ServletException { FilterInvocation fi=new FilterInvocation(请求、响应链); 调用(fi); } 公共FilterInvocationSecurityMetadataSource getSecurityMetadataSource () { 返回this.securityMetadataSource; } 公共SecurityMetadataSource obtainSecurityMetadataSource () { 返回this.securityMetadataSource; } 公共空间setSecurityMetadataSource (FilterInvocationSecurityMetadataSource新源){ 这一点。securityMetadataSource=新源; } 公共ClassSpring security用户URL权限FilterSecurityInterceptor使用解析