zoukankan      html  css  js  c++  java
  • 009 自定义过滤器

    一 .概述

      在上面的一节之中,我们介绍了过滤器的基本使用,另外使用了内置的过滤器.

      但是有的时候内置的过滤器并不能满足我们的需求.

      我们就需要使用自定的过滤器.

      在上一节之中,我们说过想要实现自定义的过滤器就需要继承AccessControllerFilert.

      本节我们就实现一个自定义的过滤器.


    二 .自定义过滤器

      我们实现一个访问该URL就记录日志的过滤器.

    public class LogFilter extends AccessControlFilter{
        //当访问该URL之后就记录日志
        @Override
        protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue)
                throws Exception {
            String[] strs = (String[]) mappedValue;
            System.out.println("记录日志了");
            System.out.println(strs[0]);
            if("123".equals(strs[0])) {
                return true;
            }
            return false;
        }
        
        //上面的方法返回true,就不会执行下面的方法.
        @Override
        protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
            System.out.println("进入了我的方法之中了...");
            return false;
        }
    
    }

    上面我们定义了一个日志Filter,其中当url的参数为123的时候拒绝访问.

    配置方式:

    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
            <property name="securityManager" ref="securityManager"></property>
            <!-- 配置登录页面 -->
            <property name="loginUrl" value="/login"></property>
            <!-- 配置未授权页面的路径 -->
            <property name="unauthorizedUrl" value="/unan.jsp"></property>
            <!-- 配置登录成功的页面 -->
            <property name="successUrl" value="/WEB-INF/success.jsp"></property>
            <!-- 配置过滤器链
                这是shiro的web配置的核心
             -->
             <property name="filterChainDefinitions">
                 <value>
                     /login=anon
                     /authc=authc
                     /user=roles[admin]
                     /user/add=perms[admin:add]
                     /log1=log[123]
                     /log2=log[234]
                 </value>
             </property>
             <property name="filters">
                 <map>
                     <entry key="log" value-ref="logFilter"></entry>
                 </map>
             </property>
        </bean>
        

    我们配置到ShiroFilter的Filter之中,是一个map的结构.

    我们的测试方式:

        @RequestMapping("/log1")
        public String log1() {
            return "log1";
        }
        @RequestMapping("/log2")
        public String log2() {
            return "log2";
        }

    当我们访问log1的时候,允许访问.

    当我们访问log2的时候,拒绝访问.


    三 .总结

    我们在实际的情况下,实际上不太喜欢自定义过滤器的,因为我们使用自定义的过滤器之后

      维护的成本就变高了.

      因为这一个过滤器的逻辑就需要学习.

      同时我们配置过滤器链的时候也出现了一个问题,

      那就是当我们的过滤器链变成的时候,我们的配置文件就无限制的增多,不利于维护.

      另外我们还希望动态的改变URL的过滤链.

  • 相关阅读:
    模板合集
    1201: 众数问题
    112. 路径总和
    Hibernate的配置及CURD
    5. 最长回文子串
    1120: 最值交换
    1119: 一维数组排序
    1118: 数列有序
    1117: 查找数组元素
    1116: 删除元素
  • 原文地址:https://www.cnblogs.com/trekxu/p/9058098.html
Copyright © 2011-2022 走看看