首页 > 作文

springboot自定义过滤器的方法

更新时间:2023-04-04 13:06:48 阅读: 评论:0

过滤器是rvlet的规范,是基于函数回调的,需要实现javax.rvlet.filter接口,依赖于tomcat等容器,一般用于过滤请求的url。

1自定义过滤器

自定义filter的实现,本质上只有一种方式,就是实现filter接口。但是在spring中我们有时候也会通过继承框架提供的xxxfilter,例如onceperrequestfilter、 abstractauthenticationprocessingfilter(spring curity使用的认证过滤器),当然,这些过滤器所实现的顶层接口还是filter,只不过框架提供的过滤器都是有其特殊职能的,我们自己实现过滤器基本通过下面两种方法。

1.1实现filter接口

public class myfilterone implements filter {  @override  public void destroy() {    //服务停止时销毁;  }  @override  public void dofilter(rvletrequest srequest, rvletrespon srespon, filterchain filterchain)      throws ioexception, rvletexception {       system.out.println("this is myfilter,url :" + request.getrequesturi());    //1、进入过滤器,通常西米粽子的制作方法在这里根据requet做一些事情    httprvletrequest request = (httprvletrequest) srequest;    //2、放行,进入下一个过滤器,如果是最后一个过滤器,就执行controller代码    filterchain.dofilter(srequest, srespon);    //3、回到过滤器,通常在这里对respon做一些处理    httprvletrespon respon = (httprvletrespon) srequest;  }  @override  public void init(filterconfig arg0) throws rvletexception {    //服务启动时创建;  }}

1.2继承onceperrequestfilter

下面的实现,并没有配置过滤路径,所有的请求都会进入到这个过滤器,但是它通过@value获取配置的url列表,然后用这个列表去和进入过滤器的请求进行对比,如果匹配就做一些操作,如果不匹配直接放行。个人觉得还是配置过滤路径好。

@component@order(-1)public class myfilterthree extends onceperrequestfilter {  private final list<pattern> uripatterns = new arraylist<pattern>();  @value("#{'${filtered.uris:^$}'.split(',')}")  private list<string> filtereduris;  @postconstruct  public void initialize() {    for (string uri : this.filtereduris) {      try {        this.uripatterns.add(pattern.compile(uri));        system.out.println(string.format("符合 '%s' 格式的uri,将进行过滤处理,否则放行.", uri));      } catch (patternsyntaxexception patternsyntaxexception) {        system.out.println("invalid regular expression pattern in filtered.uris: " + uri);      }    }  }  @override  protected void dofilterinternal(httprvletrequest httprvletrequest, httprvletrespon httprvletrespon, filterchain filterchain) throws rvletexception, ioexception {    system.out.println(httprvletrequest.getrequesturi());    system.out.println("需要过滤的路径"+ arrays.tostring(uripatterns.toarray()));    system.out.println("进入过滤器了");    filterchain.dofilter(httprvletrequest, httprvletrespon);//放行    system.out.println("又回到过滤器了");  }  private boolean ismatcheduri(string uri) {    if (stringutils.impty(uri)) {      return fal;    } el {      iterator var2 = this.uripatterns.iterator();      pattern pattern;      do {        if (!var2.hasnext()) {          return fal;        }        pattern = (pattern)var2.next();      } while(!pattern.matcher(uri).find());      return true冷色调有哪些;    }  }}

1.3使过滤器生效配置

使用配置类

@configurationpublic class myfilterconfiguration {  @bean  public filterregistrationbean registerfilter() {    system.out.println("myfilterconfiguration");    filterregist周边自助游rationbean registration = new filterregistrationbean();    registration.tfilter(new myfilterone());    registration.addurlpatterns("/public/*");//过滤的路径    registration.addinitparameter("paramname", "paramvalue");    registration.tname("myfilter");    registration.torder(1);//在过滤链中的执行顺序    return registration;  }}

@webfilter和@rvletcomponentscan(bapackages = “”)

个人比较喜欢这个方式,代码量最小

第一步:在启动类上添加注解@rvletcomponentscan(bapackages = “”)

第二步:filter类添加@webfilter注解,配置filterregistrationbean的属性@webfilter基本都有

@webfilter(urlpatterns = "/lfannotation/*")@order(-2)public class myfilterfive extends onceperrequestfilter {  @override  protected void do时间安排filte喝蜂蜜有什么好处rinternal(httprvletrequest httprvletrequest, httprvletrespon httprvletrespon, filterchain filterchain) throws rvletexception, ioexception {    system.out.println("进入5号过滤器了");  }}

2 filter生命周期

init():在构造器被调用后,紧接着被调用。作用:用来初始化filter。

dofilter():每一次拦截请求时都会调用。

destroy():方法在项目停止时调用,用来在对象被销毁前做一些收尾工作。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。

本文发布于:2023-04-04 13:06:47,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/6a263f4f0386d6c656a6201c1aaf66b3.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:springboot自定义过滤器的方法.doc

本文 PDF 下载地址:springboot自定义过滤器的方法.pdf

标签:过滤器   路径   接口   都会
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图