使⽤aop拦截springMVC的controller并获取请求参数
及返回结果
有⼈说使⽤aop拦截不到springMVC的controller,⼀般出现此种情况⼤多是由于配置错误造成,不废话直接进⼊主题:
1、l 配置扫描 除@controller外的bean
<context:component-scan base-package="XXX" scoped-proxy="targetClass">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
2、 l 配置扫描 @controller bean
<mvc:annotation-driven />
<aop:aspectj-autoproxy proxy-target-class="true"/>
<context:component-scan base-package="ller" >
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
3、编写 aop相关bean
①、拦截指定⽅法
@Pointcut("execution(* XXX.gatewayDelFromUser(..))")
public void deleGateway(){
}
@AfterReturning(pointcut ="deleGateway() && args(req,request)",returning="result")
public void afterReturnExcute(GatewayDelFromUserRequestMsg req,HttpServletRequest request,
BaseResponseMsg result) {
logger.info ("*******************************respMsg is :[{}],the result[{}]",req,result);
}
注意:此处args中的参数个数需要与拦截的⽅法个数相同,否则会拦截不到
②、⾃定义注解
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface AttributeChange {
String value() default "";
}
@Pointcut("@annotation(com.sengled.cloud.zigbee.aop.openapi.AttributeChange)")
public void arrChange(){
}
@Before("arrChange() && args(message)") public void beforExcute(Object message) {
mvc的controller}
在需要拦截的⽅法上添加 @AttributeChange 注解
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论