当前位置: 首页 > news >正文

朝城做网站公司设计师怎么弄个人网站

朝城做网站公司,设计师怎么弄个人网站,个人想做外贸怎么做,wordpress打造论坛前言 在开发过程中,我们常常使用到拦截器来处理一些逻辑。最常用的三种拦截器分别是 AOP、 Interceptor 、 Filter,但其实很多人并不知道什么时候用AOP,什么时候用Interceptor,什么时候用Filter,也不知道其拦截顺序&am…

前言

在开发过程中,我们常常使用到拦截器来处理一些逻辑。最常用的三种拦截器分别是 AOP、 Interceptor 、 Filter,但其实很多人并不知道什么时候用AOP,什么时候用Interceptor,什么时候用Filter,也不知道其拦截顺序,内部原理。今天我们详细介绍一下这三种拦截器。

拦截器顺序

我们现在有一个controller接口,叫做test,现在我们在项目有定义了三个拦截器,其顺序如下

Filter(before) > Interceptor(before) > AOP(before) > test方法 > AOP(after) > Interceptor(after) > Filter(after)

具体流程如下两幅图片。

所以有时候我们使用不了AOP/Interceptor, 只能使用Filter。

  • 比如我们现在是一个Get请求,但是别人却发送了一个Post请求,这时候只有Filter才能拦截,只能使用Filter.

  • 又比如我们在Interceptor获取了请求参数以后,因为是一个流,后面controller就会获取不到,我们一般会采用包装类来实现重复读取。但假如我们直接使用AOP就完全可以避免这个问题了。

类似的例子比较多,所以我们应该知其然,也要知其所以然。下面我们介绍一下三种拦截器的具体用法。

Filter拦截器

filter是servlet层面的提供拦截器,和spring无关。只是说现在spring/springboot一统江湖,很多项目在spring的基础上面使用filter。那我们如果在spring项目中使用filter拦截器呢

@Slf4j
public class FirstFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("FirstFilter before doFilter");filterChain.doFilter(servletRequest, servletResponse);}
}@Slf4j
public class SecondFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("SecondFilter before doFilter");filterChain.doFilter(servletRequest, servletResponse);}
}@Slf4j
@Configuration
public class FilterConfig {@Beanpublic FilterRegistrationBean firstFilter() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new FirstFilter());registration.addUrlPatterns("/*");registration.setName("FirstFilter");// 数字越小,优先级越高registration.setOrder(1);return registration;}@Beanpublic FilterRegistrationBean secondFilter() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new SecondFilter());registration.addUrlPatterns("/*");registration.setName("SecondFilter");// 数字越大,优先级越低registration.setOrder(2);return registration;}}

输出结果

FirstFilter before doFilter

SecondFilter before doFilter

Interceptor拦截器

Interceptor是springmvc给我们提供的拦截器,只有在sotingmvc中才可以使用

@Slf4j
@Component
public class FirstInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {log.info("FirstInterceptor preHandle");return true;}
}@Slf4j
@Component
public class SecondInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {log.info("SecondInterceptor preHandle");return true;}}@Configuration
public class InterceptorConfig implements WebMvcConfigurer {@Autowiredprivate FirstInterceptor firstInterceptor;@Autowiredprivate SecondInterceptor secondInterceptor;// 配置拦截规则public void addInterceptors(InterceptorRegistry registry) {// 按照注册的顺序,依次执行registry.addInterceptor(firstInterceptor).addPathPatterns("/**").excludePathPatterns("/task/**");registry.addInterceptor(secondInterceptor).addPathPatterns("/**").excludePathPatterns("/spring/**");}
}

输出结果

FirstInterceptor preHandle

SecondInterceptor preHandle

AOP拦截器

AOP是我们非常常用的拦截器,织入点,有before,after,around等,我们今天以around为例

@Aspect
@Component
public class LoggerAOP {@Pointcut("execution (public * com.xxx.controller..*(..))")public void pointcutLogger() {}@Around("pointcutLogger()")public Object methodAround(ProceedingJoinPoint joinPoint) throws Throwable {try {logger.info("request className = {}, method = {}, ip = {}, param = {}", className, methodName, ip, param);resp = joinPoint.proceed();long duration = stopwatch.elapsed(TimeUnit.MILLISECONDS);logger.info("response className = {}, method = {}, resp = {}, cost = {}ms", className, methodName, buildResp(resp), duration);}catch (Throwable e) {logger.error("logger request className = {}, method = {} fail message = {} ",className, methodName, e.getMessage(), e);throw e;}return resp;}
}

最后

我们介绍了一下spring中,常用的三种拦截器,以及他们在springboot中如何使用。

最后给大家出一个小作业,如果把上面三个拦截器放到一个项目中,他会输出什么顺序呢?

[INFO  2024-07-27 16:01:52.146] [http-nio-8099-exec-2] [] - [FirstFilter.doFilter:17] [FirstFilter before doFilter]
[INFO  2024-07-27 16:01:52.146] [http-nio-8099-exec-2] [] - [SecondFilter.doFilter:17] [SecondFilter before doFilter]
[INFO  2024-07-27 16:01:52.148] [http-nio-8099-exec-2] [] - [FirstInterceptor.preHandle:18] [FirstInterceptor preHandle]
[INFO  2024-07-27 16:01:52.148] [http-nio-8099-exec-2] [] - [SecondInterceptor.preHandle:18] [SecondInterceptor preHandle]
[INFO  2024-07-27 16:01:52.148] [http-nio-8099-exec-2] [cdc644d0-afdf-4283-bf52-fc5fdd217746] - [LoggerAOP.methodAround:52] [request className = TestController, method = testController, ip = 0:0:0:0:0:0:0:1, param = [null]][INFO  2024-07-27 16:01:52.149] [http-nio-8099-exec-2] [cdc644d0-afdf-4283-bf52-fc5fdd217746] - [TestController.testController:57] [main process][INFO  2024-07-27 16:01:52.149] [http-nio-8099-exec-2] [cdc644d0-afdf-4283-bf52-fc5fdd217746] - [LoggerAOP.methodAround:62] [response className = TestController, method = testController, resp = "ok", cost = 0ms]

文章转载自:程序员博博

原文链接:https://www.cnblogs.com/wenbochang/p/18327158

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

http://www.yayakq.cn/news/870685/

相关文章:

  • 电商运营网站网站建设的感想与建议
  • 网站建设客户调查需求表济南网站建设泉诺
  • 黄山网站开发Wordpress 百度多久收录
  • 扬州中兴建设有限公司网站wordpress 修改域名
  • app网站开发费用wordpress文章标题居中
  • 网站可以做的活动推广如何用域名做网站访问
  • 口腔网站建设南京本地网站建站
  • 可以做视频推广的网站吗外贸网站如何做seo
  • 网站图片移动怎么做的安徽网站建设seo优化
  • 建设商城网站费用系统开发中强调系统的整体性
  • 微网站访问量大数据营销的优缺点
  • 设计网站公司名称义乌网站建设微信开发
  • 网站图片设计制作广州市建设注册中心网站首页
  • 外贸网站服务商做搜索的网站有哪些
  • 图片分页网站模板微博指数查询入口
  • 国有林场网站建设公司主页设计图片
  • 网站建设与管理 教学视频买购网十大品牌官网
  • 宁波网站建设与设计制作如何建设一个子网站
  • 购物网站 开发网站空间免备案
  • 机械网站建设多少钱学校网站asp
  • 属于网页制作平台的是什么seo won jin
  • 邢台企业做网站价格上海网站空间服务器
  • 长沙制作手机网站oa协同办公系统平台
  • 信誉好的大良网站建设网站移动转换
  • 做任务反佣金的网站网站建设的卷子
  • 怎样免费创建网站黄冈资讯
  • 北京网站建设 合一设计方案审核合格后由谁签字确认
  • 百度广告联盟平台官网seowhy问答
  • 淮南电商网站建设有什么好玩的网页游戏推荐
  • 残联网站建设概况网页自我介绍制作模板