Shiro 框架 DelegatingFilterProxy

在web.xml中配置了一个DelegatingFilterProxy的一个类。如下:

<filter>

    <filter-name>shiroFilter</filter-name>

     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

      <init-param>

            <param-name>targetFilterLifeCycle</param-name>

            <param-value>true</param-value>

</filter>

这个类主要的功能是对我们在spring IOC容器中配置的bean name=shiroFilter 的实例进行代理。在下次我们如果要更换一个filter的时候不需要更改web.xml的代理。 之需要创建一个bean name和filter-name一致的filter即可。如果bean name不一直会报NoSuchBeanDefinitionException.

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">

  <property name="loginUrl" value="/login.html"></property>

  <property name="successUrl" value="/success.html"></property>

  <property name="unanthorizedUrl" value="/login.html"></property>

    <property name="filterChainDefinitions">

        <value>

            /login.html=anon  //匿名访问

            /** =authc  // 除了上面定义的权限为anon的页面,都需要授权才能访问。**表示匹配一个或者多则任意字符路径。 如/admin/**则匹配admin下任意的路径。 如果两个路径都匹配,则采取第一次匹配的过滤器 如/login.html符合 anon也匹配/** 不过是选择anon这个过滤器。

        </value>

    </property>

 

下面说一下DelegatingFilterProxy中的两个属性 

1.targetBeanName (存储即将获取的核心过滤器的ID, 如果targetBeanName没有指定则返回filterName,如果指定则是指定的targetName)

如果web.xml中加入了 如下param-value等于abc。 则会到Spring IOC中查找是否有bean名字是abc的 。 如果没有配置targetBeanName则会找到这个filter的名字作为targetBeanName.

<init-param>

    <param-name>targetBeanName</param-name>

    <param-value>abc</param-value>

</init-param>

源码: if(this.targetBeanName=null){

              this.targetBeanName=getFilterName(); // 直接调用上面我们在web.xml定义的<filter-name>shiroFilter</filter-name> 作为targetName;

            }

2. delegate 获取spring中shiro的核心过滤器 (delegate委托)

initFilterBean方法:获取指定id值,如果没有指定,自动去寻找与filter-name一致的实例。并且再到IOC容器中找到相对应名字的bean实例,并且设置到delegate属性中。

总的来说这个初始化方法就是为了把servlet容器(web.xml)中的filter和Spring IOC(application-context.xml)中的bean实例进行关联,找到想对应的bean . 

转载于:https://my.oschina.net/u/3138201/blog/897026

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值