shiro自定义filter 以及调用

268 阅读1分钟

 1.首先在web.xml里面配置

    <!-- Shiro Security filter -->
    <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>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>shiroFilter</filter-name>
        <url-pattern>/*</url-pattern>
       
    </filter-mapping>

2.在shiro的配置文件中配置,红色就是重点配置

<!-- Shiro主过滤器本身功能十分强大,其强大之处就在于它支持任何基于URL路径表达式的、自定义的过滤器的执行 Web应用中,Shiro可控制的Web请求必须经过Shiro主过滤器的拦截,Shiro对基于Spring的Web应用提供了完美的支持 -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <!-- Shiro的核心安全接口,这个属性是必须的 -->
        <property name="securityManager" ref="securityManager" />

        <!-- 要求登录时的链接(可根据项目的URL进行替换),非必须的属性,默认会自动寻找Web工程根目录下的"/login.html"页面 -->
        <!-- <property name="loginUrl" value="http://localhost:8080/renren-security/login.html"
            /> -->
        <property name="loginUrl" value="login" />
        <!-- 登录成功后要跳转的连接 -->
        <property name="successUrl" value="/index" />
    
        <property name="unauthorizedUrl" value="/" />
        <!-- Shiro连接约束配置,即过滤链的定义
            下面value值的第一个'/'代表的路径是相对于HttpServletRequest.getContextPath()的值来的 anon:它对应的过滤器里面是空的,什么都没做,这里.do和.jsp后面的*表示参数,比方说login.jsp?main这种
            authc:该过滤器下的页面必须验证后才能访问,它是Shiro内置的一个拦截器org.apache.shiro.web.filter.authc.FormAuthenticationFilter -->


        <property name="filters">
            <map>
                <entry key="login123"value-ref="login" />
            </map>
        </property>

        <property name="filterChainDefinitions">

            <value>
                /list*=login123   <!--调用上面配置的拦截器-->
                /statics/**=anon
                <!-- /login=anon -->
                /js/**=anon
                /logout* = anon
                /captcha.jpg=anon
                /**=login123,authc <!--调用上面配置的拦截器-->
            </value>
            <!-- 自定义shiro 的 Filter -->

        </property>

3.配置你写的拦截器,我配置的

    <!-- 自定义Filter bean -->
    <bean id="login" class="com.fca.filter.LoginFilter">
        <!-- <property name="jedis" ref="jedis" /> -->    <!--注入参数-->
        <property name="sessionProvider" ref="sessionProvider" />

    </bean>

4.filter的编写  到底继承那个filter 可以去看开涛大神的这篇文章: 第八章 拦截器机制——《跟我学Shiro》 jinnianshilongnian.iteye.com/blog/202565…

public class LoginFilter extends XXFilter {
  
    @Autowired
    private SessionProvider sessionProvider;

    /*
     * @Autowired private Jedis jedis;
     *
     * public Jedis getJedis() { return jedis; }
     *
     * public void setJedis(Jedis jedis) { this.jedis = jedis; }
     */

    public SessionProvider getSessionProvider() {
        return sessionProvider;
    }

    public void setSessionProvider(SessionProvider sessionProvider) {
        this.sessionProvider = sessionProvider;
    }





}