加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

filter、interceptor、aspect应怎样选择?许多人中招

发布时间:2019-08-21 19:52:43 所属栏目:移动互联 来源:老顾聊技术
导读:媒介 小搭档们应该传闻过过滤器、拦截器、切面,印象上都可以或许起到截断拦截的浸染,在做一些营业需求时,不知道怎样选择,本日老顾就来先容一下他们之间的区别。 Filter过滤器 过滤器可以拦截到要领的哀求和相应(ServletRequest request, ServletResponse r
副问题[/!--empirenews.page--]

 媒介

小搭档们应该传闻过过滤器、拦截器、切面,印象上都可以或许起到截断拦截的浸染,在做一些营业需求时,不知道怎样选择,本日老顾就来先容一下他们之间的区别。

Filter过滤器

过滤器可以拦截到要领的哀求和相应(ServletRequest request, ServletResponse response),并对哀求相应做出过滤操纵。

过滤器依靠于servlet容器。在实现上,基于函数回调,它可以对险些全部哀求举办过滤,一个过滤器实例只能在容器初始化时挪用一次。

行使过滤器的目标是用来做一些过滤操纵,获取我们想要获取的数据,好比:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包罗:过滤低俗笔墨、伤害字符等。

话不多说,先上代码

阿里二面:filter、interceptor、aspect应怎样选择?许多人中招

再界说两个Controller,一个UserController,一个OrderController

阿里二面:filter、interceptor、aspect应怎样选择?许多人中招 阿里二面:filter、interceptor、aspect应怎样选择?许多人中招

固然Filter过滤器和Controller哀求都已经界说了,但此刻过滤器是不起浸染的。必要把Filter设置一下,有两个方案

第一个方案在Filter上面加上@Component

  1. @Component 
  2. public class TimeFilter implements Filter 

第二个方案设置化注册过滤器

阿里二面:filter、interceptor、aspect应怎样选择?许多人中招

第二个方案的特点就是可以细化到过滤哪些法则的URL

我们来启动应用时,过滤器被初始化了,init函数被回调。

阿里二面:filter、interceptor、aspect应怎样选择?许多人中招

哀求http://localhost:9000/order/1

阿里二面:filter、interceptor、aspect应怎样选择?许多人中招

看看节制台的日记输出

阿里二面:filter、interceptor、aspect应怎样选择?许多人中招

哀求http://localhost:9000/user/1

阿里二面:filter、interceptor、aspect应怎样选择?许多人中招

节制台日记输出

阿里二面:filter、interceptor、aspect应怎样选择?许多人中招

遏制应用后,节制台输出

阿里二面:filter、interceptor、aspect应怎样选择?许多人中招

Filter随web应用的启动而启动,只初始化一次,随web应用的遏制而烧毁。

1.启动处事器时加载过滤器的实例,并挪用init()要领来初始化实例;

2.每一次哀求时都只挪用要领doFilter()举办处理赏罚;

3.遏制处事器时挪用destroy()要领,烧毁实例。

我们再来看看doFilter要领

doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

从参数我们看到,filter内里是可以或许获取到哀求的参数和相应的数据;但此要领是无法知道是哪一个Controller类中的哪个要领被执行。

尚有一点必要留意的是,filter中是没法行使注入的bean的,也就是无法行使@Autowired

阿里二面:filter、interceptor、aspect应怎样选择?许多人中招

上面代码注入的值为null。这是为什么呢?

着实Spring中,web应用启动的次序是:listener->filter->servlet,先初始化listener,然后再来就filter的初始化,再接着才到我们的dispathServlet的初始化,因此,当我们必要在filter里注入一个注解的bean时,就会注入失败,由于filter初始化时,注解的bean还没初始化,没法注入。

假如必然你要行使,必要做一些处理赏罚,可以私信老顾哦

Interceptor拦截器

依靠于web框架,在SpringMVC中就是依靠于SpringMVC框架。在实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种运用,就是在一个要领前,挪用一个要领,可能在要领后,挪用一个要领。

阿里二面:filter、interceptor、aspect应怎样选择?许多人中招

在WebMvcConfigurationSupport设置一下

阿里二面:filter、interceptor、aspect应怎样选择?许多人中招

执行功效

阿里二面:filter、interceptor、aspect应怎样选择?许多人中招

我们发明拦截器中可以获取到Controller工具

preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

object handler就是controller要领工具

HandlerMethod handlerMethod = (HandlerMethod)handler;
handlerMethod.getBean().getClass().getName(); //获取类名
handlerMethod.getMethod().getName(); //获取要领名

但我们发明获取不到要领的参数值,这个是为什么呢?在DispatcherServlet类中,要领

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读