首页 > 编程知识 正文

springboot web项目,aop获取方法参数

时间:2023-05-03 17:49:17 阅读:173520 作者:1160

框架给我们的开发带来许多便利,但以前学到的许多知识的使用在框架中略有不同。 本文主要介绍了框架中过滤器和拦截器的使用,并分析了过滤器、拦截器与AOP的关系和差异

滤波器的作用主要是屏蔽路径匹配的请求,在妥善处理请求后,释放请求并执行原处理逻辑。

如果有多个过滤器,则会形成一个过滤器链,一次运行一个过滤器链,只有在请求路径匹配时才会阻止过滤器

使用创建类,实现Filter接口并重写doFilter ()方法

@ sl F4 jpublicclasstimefilterimplementsfilter (privatesimpledateformatsimpledateformat=newsimpledateformat ) yyy-mm-datemm ervletrequestrequest,ServletResponse response,filter chain ) throws IOException,servlet exception { log.info (' time ) chain.dofilter(request,response ); log.info ('执行请求处理逻辑后返回TimeFilter的时间: {},simple date format.format (new date ) system.currenttimemillis ) ) }创建配置类并使用方法创建过滤器,然后将其放入容器中

@ configurationpublicclasswebconfigimplementswebmvcconfigurer { @ beanpublicfilterregistrationbeantimefilter } filtereregistrer filterregistrationbean.set filter (time filter; //添加拦截路径filterregistrationbean.add URL patterns ('/filter/* ' ); SetString path=new HashSet (; //对于多路径//path.add(/filter/test1 ); //path.add(/filter/test2); //filterregistrationbean.set URL patterns (path; //过滤器的执行顺序为filterregistrationbean.set order (1; return filterRegistrationBean; }测试请求接口并显示日志信息

在日志信息中,您可以看到请求已在过滤器中成功截获

拦截器拦截器也将根据请求路径被拦截。 拦截器类似于Aop,它是在代理模式下实现的,可以在执行想要访问的接口方法之前和之后进行操作。 在框架中,可以通过实现HandlerInterceptor接口来创建拦截器。 需要重写以下三种方法: preHandle ()、postHandle ()和afterCompletion ()。

使用创建类,实现HandlerInterceptor接口,并重写preHandle (、postHandle )、afterCompletion )方法

@ slf4j @ componentpublicclasstimeinterceptorimplementshandlerinterceptor { privatesimpledateformatsimpledateformat=newsimplete ANP rehandle (httpservletrequestrequest,HttpServletResponse response,object handler (throws exception (log.info ) ) ) time ime

e时,才能够继续执行postHandle()、afterCompletion()方法,若是false表示请求结束,将会不再执行 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.info("调用TimeInterceptor中的postHandle()方法的时间:{}",simpleDateFormat.format(new Date(System.currentTimeMillis()))); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.info("调用TimeInterceptor中的afterCompletion()方法的时间:{}",simpleDateFormat.format(new Date(System.currentTimeMillis()))); }}

在配置类中,把拦截器添加到容器中,并设置拦截路径

@Configurationpublic class WebConfig implements WebMvcConfigurer { @Autowired private TimeInterceptor timeInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(timeInterceptor).addPathPatterns("/interceptor/*");// 多路径配置// List<String> path = new ArrayList<>();// path.add("/interceptor/test1");// path.add("/interceptor/test2");// registry.addInterceptor(timeInterceptor).addPathPatterns(path); }} 测试

请求接口并查看日志信息

在日志中可以看到,拦截器已经成功拦截到了请求,并执行了三个方法

过滤器、拦截器、Aop 执行顺序

当过滤器、拦截器、Aop都用于一个请求路径的接口方法时,执行顺序为 过滤器-》拦截器-》AOP

作用 过滤器的主要作用 用户访问权限处理设置字符集乱码处理过滤敏感词汇、压缩响应信息 拦截器的主要作用 只能拦截请求,可以访问上下文等对象,功能强大,一个请求可多次拦截。用户访问权限处理登记日志 AOP的主要作用

日志记录

性能统计

安全控制

事务处理

异常处理

只能应用于由 Spring 容器管理的 bean

一般情况下,数据被过滤拦截的时机越早对服务的性能影响越小,在编写相对比较公用的代码时,优先考虑过滤器,然后是拦截器,最后是AOP

区别

过滤器与拦截器的拦截是通过匹配请求路径实现的,而AOP(面向切面)拦截可以通过切点切向包、类、方法名、参数等

Spring AOP和拦截器一样,都是AOP的实现方式的一种,均使用代理模式实现

Aop能够对包、类、方法名、参数等拦截,相对于拦截其而言,更加灵活,Aop可以针对具体的代码,去实现更加复杂的业务逻辑

拦截器只对action负责,作用层面一般位于Controller层,Spring AOP主要是拦截对Spring管理的Bean的访问,一般作用与Service层

参考

Spring 过滤器 拦截器 AOP区别

最详细的讲解过滤器,拦截器,AOP的区别

本文若有任何出错或理解有误的地方,请帮忙指出,谢谢

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