首页 > 编程知识 正文

spring mvc拦截器,javaweb过滤器和拦截器

时间:2023-05-03 14:11:46 阅读:176436 作者:1620

spring拦截器的机制与servlet过滤器几乎相同。

如果您不知道servlet过滤器,可以首先看到此链接: servlet过滤器的简单使用

spring拦截器建设项目首先,引入的pom与servlet相同

接下来,创建三个1、2和3拦截器

拦截器1:

package com.zhi sen.uud.interceptor; import java.util.Date; import javax.servlet.http.http servlet request; import javax.servlet.http.http无servlet轮询; importorg.spring framework.web.servlet.handler interceptor; importorg.spring framework.web.servlet.modelandview; public class interceptor1implementshandlerinterceptor { privatethreadlocaldatedata=newthreadlocaldate (; @ overridepublicbooleanprehandle (httpservletrequestrequest,HttpServletResponse response,object handler (throws exception ) Date startDate=new Date (; this.data.set(startdate; stringpath=(httpservletrequest ) request ).getRequestURI; System.out.println (从地址到((IPstring ) (URL ) ) (path ) )请求时间) (startdate ) ); 返回真; } @ overridepublicvoidposthandle (httpservletrequestrequest,HttpServletResponse response,Object handler,modelandview modelew system.out.println('1运行时间: { ' (fisnishdate.gettime (-start date.gettime ) }毫秒); }} 拦截器2:

package com.zhi sen.uud.interceptor; import java.io.PrintWriter; import java.util.Date; import javax.servlet.http.http servlet request; import javax.servlet.http.http无servlet轮询; importorg.spring framework.web.servlet.handler interceptor; importorg.spring framework.web.servlet.modelandview; public class interceptor2implementshandlerinterceptor { privatethreadlocaldatedata=newthreadlocaldate (; @ overridepublicbooleanprehandle (httpservletrequestrequest,HttpServletResponse response,Object handler ) throws exception { this.data.set(startdate; stringnamestring=request.getparameter (' username ); //arg0.setattribute(arg0,arg1); //设置属性。 他不是参数if (null==namestring|'.equals ) name string ) ({System.out.println ) );必需参数userName ); response.set content type (application/JSON; charset=utf-8 '; printwriter writer=response.get writer (; writer.write((((status () :0,((() msg ) ) : ) ) )所需的参数username () ); 返回假; } else {return true; } @ overridepublicvoidposthandle (httpservletrequestrequest,HttpServletResponse response,Object handler,modelandviewmodddier system.out.println('2运行时间: { ' (fisnishdate.gettime (-start date.gettime ) }毫秒); }} 拦截器3:

package com.zhi sen.uud.interceptor; import java.io.PrintWriter; import java.util.Date; import javax.servlet.http.http servlet request; import javax.servlet.http.http无servlet轮询; importorg.spring framework.web.servlet.handler interceptor; importorg.spring framework.web.servlet.modelandview; public class interceptor3implementshandlerinterceptor { privatethreadlocaldatedata=newthreadlocaldate (; @ overridepublicbooleanprehandle (httpservletrequestrequest,HttpServletResponse response,Object handler ) throws exception { this.data.set(startdate; stringpath=(httpservletrequest ) request ).getRequestURI; if(/test ).equals(path ) {return true; } else { stringtockenstring=request.getparameter (' token ); 空值==tockenstring|| '.equals (tockenstring ) ({System.out.println ) ) (无权限); response.set content type (application/JSON; charset=utf-8 '; printwriter writer=response.get writer (; writer.write((((status () :0,)、msg ) )、 )、权限() ) ); 返回假; } else {return true; } } @ overridepublicvoidposthandle (httpservletrequestrequest,HttpServletResponse response,Object handler,modelandviewmmmand //system.out.println(3运行时间() ) (fisnishdate.gettime )-startDate.getTime ) }毫秒); }与servlet不同,实现的接口为HandlerInterceptor,方法的返回值为boolean,如果为true,则释放并进入下一个拦截器,如果为false,则阻止。

因为当您想查看单个拦截器的运行时间时,postHandle函数在拦截接口时会从底层走向回调。

只有最后的拦截器的时间会变得正确,其他拦截器会被与其相同线程的数据干扰而影响。

在这种情况下,必须将数据设置为ThreadLocal

进入拦截器时触发,调用data保存,回调时调用data获取数据,可以查看各拦截器的运行时间。

案例结果参数齐全:

缺少token:

缺少userName:

因为很难整理,所以以上内容都是原创的。 (参考了一些官方文件和老师整理的案例。 引用的时候请附上这篇文章的链接。 如果有问题的话请在评论区自由地说。 作者马上回复。 欢迎交流。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。