Shiro源码学习(一)Filter的创建

本文深入探讨了Shiro框架中Filter的创建过程,从web.xml配置到Spring容器,详细分析了DelegatingFilterProxy如何包装Filter,并讲解了ShiroFilterFactoryBean在Spring中的作用。内容包括FactoryBean接口的实现,FilterChainManager的创建,以及自定义Filter的处理,最终揭示了拦截器的实际工作原理。
摘要由CSDN通过智能技术生成

一、从web.xml到Spring容器

我们在使用spring配置shiro时,有两处需要配置Filter相关的地方:

    <!-- Shiro配置 -->
    <filter>
        <filter-name>shiroFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>shiroFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping> 
    <!-- Shiro的Web过滤器 -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <!-- 调用我们配置的权限管理器 -->
        <property name="securityManager" ref="securityManager"/>
        <!-- 配置我们的登录请求地址 -->
        <property name="loginUrl" value="/static/login.html"/>
        <!--<property name="loginUrl" value="/common/login"/>-->
        <!-- 配置我们在登录页登录成功后的跳转地址,如果你访问的是非/login地址,则跳到您访问的地址 -->
        <property name="successUrl" value="/common/route"/>
        <!-- 如果您请求的资源不再您的权限范围,则跳转到/403请求地址 -->
        <property name="unauthorizedUrl" value="/common/403"/>
        <property name="filters">
            <map>
                <entry key="ownauthc">
                    <!--自定义过滤器,方便ajax交互-->
                    <!--<ref bean="formAuthenticationFilter"/>-->
                    <ref bean="ownRoleAuthorizationFilter"></ref>
                </entry>
            </map>
        </property>
        <!-- 权限配置 -->
        <property name="filterChainDefinitions">
            <value>
                <!--/common/doLogin/user=ownauthc-->
                /common/**=anon
                /search/**=anon
                /static/superAdmin/**=roles[superadmin]
                /static/admin/**=roles[admin]
                /static/** = anon
            </value>
        </property>

    </bean>

其实真正发挥拦截器作用的只有Spring中配置的ShiroFilterFactoryBean,而web.xml中配置的拦截器DelegatingFilterProxy功能相当于是为Spring中的Filter做了一层包装, DelegatingFilterProxy相关的源码如下:

	@Override
	protected void initFilterBean() throws ServletException {
		synchronized (this.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值