Spring boot三大器

news/2024/12/22 14:40:02/

在Spring boot 中的应用中的三大拦截机制 Filter 、Interceptor 、Aspect

1、Filter

Filter功能:可以拿到原始的http请求,但是拿不到你请求的控制器和请求控制器中的方法的信息

Filter使用:

package com.llangzh.filter;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;import org.springframework.stereotype.Component;@Component
public class MyFilter implements Filter{@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("myFilter init........");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {System.out.println("执行任务前.................");chain.doFilter(request, response);System.out.println("执行任务后...........");}@Overridepublic void destroy() {System.out.println("Myfilter destory........");}}

测试:

。。。。。。。。。myFilter init........。。。。。。。。。doFilter 执行任务前...........
任务执行...........
doFilter 执行任务后...........

2、Interceptor

Interceptor作用:可以拿到你请求的控制器和方法,却拿不到请求方法的参数

Interceptor用法:

(1)先在配置类中配置Interceptor

package com.llangzh.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import com.llangzh.interceptor.MyInterceptor;@Configuration
public class interceptorConfig extends WebMvcConfigurerAdapter{@Autowiredprivate MyInterceptor myInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(myInterceptor);}
}

(2)使用Interceptor

package com.llangzh.interceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;@Component
public class MyInterceptor implements HandlerInterceptor{@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {System.out.println("preHandler..........");System.out.println(((HandlerMethod)handler).getBean().getClass().getName());request.setAttribute("abc", "abc");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {System.out.println("postHandler...........");System.out.println(request.getAttribute("abc"));}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {System.out.println("afterHandler..........");System.out.println("ex is" + ex);}
}

测试:

preHandler..........
com.llangzh.controller.UserController
任务执行...........
postHandler...........
abc
afterHandler..........
ex isnull

3、Aspect

aspect作用:可以拿到方法的参数,但是却拿不到http请求和响应的对象

aspect用法:

package com.llangzh.aspect;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;@Aspect
@Component
public class MyAspect {//环绕方式@Around("execution(* com.llangzh.controller.UserController.*(..))")public Object handlerControllerMethod(ProceedingJoinPoint point) throws  Throwable {System.out.println("MyAspect start............");Object[] args = point.getArgs();for (Object arg : args) {System.out.println(arg);}Object proceed = point.proceed();System.out.println("MyAspect end............");return proceed;}
}

测试:

MyAspect start............
1
任务执行...........
MyAspect end............

当Filter、Interceptor、Aspect一起存在的时候,测试结果为:

doFilter 执行任务前...........
preHandler..........
com.llangzh.controller.UserController$$EnhancerBySpringCGLIB$$a43b51b8
MyAspect start............
1
任务执行...........
MyAspect end............
postHandler...........
abc
afterHandler..........
ex isnull
doFilter 执行任务后...........

可以看到拦截过程为:Filter——>Interceptor——>Aspect


http://www.ppmy.cn/news/450685.html

相关文章

python三大器_Python 入门之 Python三大器 之 迭代器

1、迭代器 (1)可迭代对象 <1> 只要具有__ iter__()方法就是一个可迭代对象 (我们可以通过dir()方法去判断一个对象具有什么方法&#xff0c;dir()会返回一个列表&#xff0c;这个列表中含有该对象的以字符串的形式的所有方法名) lst.__iter__() dict.__iter__() <2>…

java3大器_阿里祭出大器,Java代码检查插件

【套装3本】代码整洁之道三部曲教材 176.8元 包邮 (需用券) 去购买 > 背景 前阵子阿里巴巴发布了<>。 不久&#xff0c;又一气呵成发布了Eclipse/Intellij Idea下的代码检测插件PC3&#xff0c;可谓是国内代码优秀的检测插件。此插件检测的标准是根据<>上面制定…

windows pe文件导入表隐藏

前言 分析过一些文件&#xff0c;发现里面都会对引用的api进行动态获取&#xff0c;然后通过内存指针调用。细细想来&#xff0c;这种方法还是有一定的对抗作用的&#xff0c;如果别人想要分析的必须的稍微深入或者动态调试一下。然后&#xff0c;我就想着该如何实现这种用法呢…

python三大器,Python 入门之 Python三大器 之 生成器

Python 入门之 Python三大器 之 生成器 1、生成器 (1)什么是生成器&#xff1f; 核心&#xff1a;生成器的本质就是一个迭代器 迭代器是Python自带的 生成器程序员自己写的一种迭代器 def func(): print("这是一个函数") return "函数" func() def func():…

java三大器

拦截器&#xff1a;利用反射的机制实现&#xff0c;针对action、日志、未登录用户。 4.1&#xff0c;拦截器是基于java反射机制来实现的&#xff0c;而过滤器是基于函数回调来实现的。&#xff08;有人说&#xff0c;拦截器是基于动态代理来实现的&#xff09; 4.2&#xff0…

java 三大器

过滤器&#xff08;Filter&#xff09; 所谓过滤器顾名思义是用来过滤的&#xff0c;Java的过滤器能够为我们提供系统级别的过滤&#xff0c;也就是说&#xff0c;能过滤所有的web请求&#xff0c;这一点&#xff0c;是拦截器无法做到的。在Java Web中&#xff0c;你传入的requ…

python三大器_Python - 三大器 迭代器,生层器,装饰器

Python - 三大器 迭代器,生层器,装饰器 在介绍三大器之前先来了解一下容器和可迭代对象... 一. 容器 容器是一种把多个元素组织在一起的数据结构&#xff0c;容器中的元素可以逐个地迭代获取&#xff0c;可以用in, not in关键字判断元素是否包含在容器中。通常这类数据结构把所…

Spring三大器

Spring三大器 监听器listener Servlet的监听器Listener&#xff0c;它主要作用是随着web应用的启动而启动&#xff0c;只初始化一次&#xff0c;随着web的停止而销毁。 主要工作是&#xff1a;进行一些初始化的工作&#xff0c;例如参数或者固定一些固定对象 Spring boot框架自…