首页 > 编程知识 正文

java拦截器使用详解,java怎么使用过滤器进行拦截

时间:2023-05-05 19:37:15 阅读:17160 作者:2792

前言

springmvc有两个常见的AOP实现。

1 .过滤器(过滤器)。

2 .拦截(拦截器)。

本篇面对着刚刚接触springboot的人们

因此,我们主要介绍过滤器和拦截器的简单实现及其区别

(一些复杂的功能稍后会发表文章,请关注)

过滤器的简单实现

正如文字所示,过滤器是过滤角色,用于过滤web开发中指定的url

那么你能帮我过滤什么呢?

它的功能会更多:

例如,拦截过我们不需要的接口的请求

修改请求和响应的内容

CORS跨域请求的完成等

现在让我们来做一个简单的过滤器:

可以创建新的过滤器包。 随着项目的扩大,过滤器也会增加

在此新建了TestFilter类,实现了Filter接口

@Component

@webfilter(URLpatterns='/blogs ',filterName='blosTest ' )。

publicclasstestfilterimplementsfilter { }

我们一步一步来

1.@Component是将这个等级注入IOC容器

2.@ web filter (URL patterns='/blogs ',filterName='blosTest ' )这是监听到的URL为/blogs、过滤器名称为blogsTest的web filter

发布实现接口后的三种重构方法。

@Override

公共void init (过滤器配置文件配置) throws ServletException {

}

@Override

publicvoiddofilter (servletrequestservletrequest,ServletResponse servletResponse,过滤器通道过滤器通道) throws IOException

http servlet请求=(http servlet请求) servlet请求;

http servlet响应=(http servlet响应) servlet响应;

System.out.printf ('过滤器实现');

filter chain.do filter (请求,响应;

}

@Override

公共语音目录

}

初始化(init )和破坏)的方法一般不使用。 具体来说,看看源代码就知道了

doFilter ()是过滤器的核心

注意:在实现接口方法后,将request和response类型转换为http servlet。 如果不进行转换,以下操作可能会发生错误:

如果过滤器通过,请运行filter chain.do filter (请求,响应)。

显示这个url通过了我们的过滤器

正如您所见,我们只在一个类中实现了简单的过滤器

当然,可以在没有注释的情况下设置启动类

//过滤器

@Bean

publicfilterregistrationbeanfilterregistrationbean {

filterregistrationbeanfilterregistrationbean=newfilterregistrationbean (;

List urlPatterns=new ArrayList (;

testfiltertestfilter=new test filter (; //new过滤器

URLpatterns.add(/blogs ); //指定要过滤的url

filterregistrationbean.set filter (测试过滤器;//集

filterregistrationbean.set URL patterns (URL patterns;//集

return filterRegistrationBean;

}

这也可以,但本人其实建议用这种方式添加过滤器

Interceptor的简单实现

拦截器的实现比过滤器稍微复杂一些

我们也可以制作新的interceptor包

smdxs创建一个名为MyInterceptor的新类

p>public class MyInterceptor implements HandlerInterceptor {}

这个类实现了HandleInterceptor接口

直接贴类代码,我会在代码中注释功能

public class MyInterceptor implements HandlerInterceptor {

//在请求处理之前进行调用(Controller方法调用之前

@Override

public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {

System.out.printf("preHandle被调用");

return true; //如果false,停止流程,api被拦截

}

//请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)

@Override

public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

System.out.println("postHandle被调用");

}

//在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)

@Override

public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

System.out.println("afterCompletion被调用");

}

}

它依次实现了三个方法

相比过滤器,拦截器还需要在springmvc中注入

所以我们打开启动类,写入以下代码

public class WarApplication {

public static void main(String[] args) {

SpringApplication.run(WarApplication.class, args);

}

//mvc控制器

//@Configuration

static class WebMvcConfigurer extends WebMvcConfigurerAdapter{

//增加拦截器

public void addInterceptors(InterceptorRegistry registry){

registry.addInterceptor(new MyInterceptor()) //指定拦截器类

.addPathPatterns("/Handles"); //指定该类拦截的url

}

}

}

这里我在/Handles这个url中进行拦截

代码写完了,来看下结果

当进入指定url时,我们执行到了拦截器

接下来就可以根据需求去使用拦截器了

区别

过滤器和拦截器非常相似,但是它们有很大的区别

最简单明了的区别就是过滤器可以修改request,而拦截器不能

过滤器需要在servlet容器中实现,拦截器可以适用于javaEE,javaSE等各种环境

拦截器可以调用IOC容器中的各种依赖,而过滤器不能

过滤器只能在请求的前后使用,而拦截器可以详细到每个方法

区别很多,大家可以去查下

总的来说

过滤器就是筛选出你要的东西,比如requeset中你要的那部分

拦截器在做安全方面用的比较多,比如终止一些流程

以上这篇详谈springboot过滤器和拦截器的实现及区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

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