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的过滤链.

原文地址:https://www.cnblogs.com/trekxu/p/9058098.html

时间: 2024-10-20 09:58:42

009 自定义过滤器的相关文章

Django中自定义过滤器的使用

我在这里做的是: 从数据库查出id递增的一些信息,展示在前台. 编写一个过滤器判断查出数据的id是偶数的返回True 奇数返回False 1 创建项目,创建应用,注册应用,配置settings.py文件,配置urls映射,编写views试图,编写模板templates,编写models模块 切记 注册应用.  很多伙伴找不到自己定义的过滤器,是因为忘记注册应用! 2 创建过滤器的目录: 实际上,在项目目录或者应用目录下创建都是可以的,创建一个名为templatetags的python模块 在我这

lucene自定义过滤器

先介绍下查询与过滤的区别和联系,其实查询(各种Query)和过滤(各种Filter)之间非常相似,可以这样说只要用Query能完成的事,用过滤也都可以完成,它们之间可以相互转换,最大的区别就是使用过滤返回的结果集不带评分操作,而使用Query返回的结果都是带相关性评分的,所以当我们如果有一些跟评分操作没有关系的业务,优先使用Filter操作,将会获取更好的性能,其实这也是Solr里面的q参数跟fq参数的区别.  下面,开始进入正题,在这之前,散仙还是喜欢老生常谈的先来了解一下Lucene里面有关

自定义过滤器

自定义过滤器有两种方法 $filterProvider.register('filterName',function(){ return function(obj){ var newObj =[]; angular.forEach(obj,function(o){ if(o.age>20) newObj.push(o); }) return newObj } }) 第二种 angular.module('myapp',[]).filter('filterName',function(){ ret

vue学习(二):自定义过滤器和自定义指令

#自定义指令 自定义指令的参数有: el: 指令所绑定的元素,可以用来直接操作 DOM . binding: 一个对象,包含以下属性: name: 指令名,不包括 v- 前缀. value: 指令的绑定值, 例如: v-my-directive="1 + 1", value 的值是 2. oldValue: 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用.无论值是否改变都可用. expression: 绑定值的字符串形式. 例如 v-my-di

phalcon模板引擎(volt)自定义过滤器

引子:今天遇到一个问题,模板中某些变量有时候没有定义,如果php开启了E_ALL报错级别,那么会出现一个notice,提示变量未定义. 一开始的想法是通过三元表达式( )来给每个变量设定一个默认值,后来发现这种写法太繁琐,而且与volt标签格格不入. 再后来想到屏蔽E_NOTICE报告,但开发环境下还是很不恰当的. 最后发现volt引擎有一个过滤器Filters功能,解决了这个问题,写法如:{{ var|default('str') }} ,在$var为空的时候,将会将该处设置为str,当然,s

Servlet学习笔记(八)—— 自定义过滤器的编写改进:自定义实现FilterChain

笔记六中实现了三种过滤器:字符编码过滤.登录权限过滤.敏感词过滤,但是有个缺陷就是,限定了过滤顺序,而不能实现先进行request过滤,最后response过滤,并且中间几项过滤的顺序不能动态改变.所以这里做个改进,实现一个过滤顺序的FilterChain. 多个Filter的执行顺序在这篇博文中得到很仔细的讲解,总结一点,多个过滤器的执行顺序是根据web.xml中不同<filter-mapping>的顺序来先后执行的,比如: <?xml version="1.0"

angularjs随笔01 数据双向绑定理解 自定义过滤器 时钟更新列子

1.   数据的双向绑定可以简单的理解为,无论在文本框中输入什么,都会在数据模型中显示出来输入的内容, 双向绑定的模型和数据是进行动态绑定的,实时检查进行修改. <input type="text" ng-model="name"> {{name}} 在上述代码中,通过angular.js将数据模型对象($scope)的name属性与文本模型绑定在一起,然后就实现了在输入框输入什么都会 在文本模型中显示对应的内容,实时更新. 控制器controller,

spring 集成shiro 之 自定义过滤器

出自:http://blog.csdn.net/shuishouhcd/article/details/9077379 最近一段时间,我一直在将shiro集成到我的一个项目中,用作认证和授权处理. shiro对我来说是个新东西,以下是我学习过的内容: http://shiro.apache.org/authorization.html http://www.cnblogs.com/skyme/archive/2011/09/11/2173760.html  系列 http://www.infoq

django之创建第6-1个项目-自定义过滤器

1.在站点blog目录下创建templatetags文件夹 2.templatetags目录下需要作为一个包来处理和调用其中的内容,需要有一个__init__.py文件 3.在templatetags目录下创建percent.py文件(里面定义过滤器) 4.编写percent.py文件,定义过滤器 # -*- coding: UTF-8 -*- #自定义过滤器,注意这里编码一定不要掉了,不然会报错啊~~~~ from django import template register = templ