javaEE--Filter,Interceptor,AOP使用场景

过滤器

   过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。

由于filter获取的参数为ServletRequest request, ServletResponse response, FilterChain chain,无法知道是哪个类的那个方法调用,更无法知道调用时的参数。

使用详见:https://www.cnblogs.com/zmwf/p/9103208.html

Interceptor

首先编写一个AnimalInterceptor实现HandlerInteceptor方法,实现相应的三个方法,preHandle执行方法前执行返回的结果决定是否往下执行,postHandle当方法返回值时执行,afterCompletion无论成功或失败都将执行,前提是preHandler要返回true

@Component
public class AnimalInterceptor implements HandlerInterceptor {
 
    private Logger logger = LoggerFactory.getLogger(getClass());
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        String methodName = handlerMethod.getMethod().getName();
        logger.info("AnimalInterceptor:preHandle:methodName:" + methodName);
        logger.info("AnimalInterceptor:preHandle");
        return true;
    }
 
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        logger.info("AnimalInterceptor:preHandle:methodName:" + handlerMethod.getMethod().getName());
        logger.info("AnimalInterceptor:postHandle");
    }
 
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        logger.info("AnimalInterceptor:afterCompletion");
    }
}

将写好的AnimalInterceptor注入到spring的interceptor注册中心即可。

​
@Component
public class InterceptorConfig extends WebMvcConfigurerAdapter{
 
    @Autowired
    AnimalInterceptor animalInterceptor;
 
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(animalInterceptor);
    }
}

虽然interceptor可以知道调用的controller,调用的方法,但获取不到调用方法的参数。

AOP

编写AnimalAspect如下,可将传递的参数打印出来,aop拦截规则设置请查看,https://blog.csdn.net/FU250/article/details/80219415

@Aspect
@Component
public class AnimalAspect {
    private Logger logger = LoggerFactory.getLogger(getClass());
 
    @Around("execution(* com.imooc.security.demo.web.controller..*.*(..))")
    public Object handleAnimalController(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        Arrays.stream(proceedingJoinPoint.getArgs()).forEach(arg -> {
            logger.info("arg:"+arg);
        });
        logger.info("AnimalAspect");
        return proceedingJoinPoint.proceed();
    }
}
 FilterInterceptorAOP
参数

ServletRequest, ServletResponse,

FilterChain chain

HttpServletRequest , HttpServletResponse ,

Object handler

ProceedingJoinPoint 
解释可以拿到原始的http请求,但是拿不到你请求的控制器和请求控制器中的方法的信息可以拿到你请求的控制器和方法,却拿不到请求方法的参数可以拿到方法的参数,但是却拿不到http请求和响应的对象

 

拦截器执行顺序是:

以上就是本文所有的内容,如有任何问题请及时留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值