AOP拦截常用请求内容
来源:互联网 发布:纱窗修补胶带 淘宝 编辑:程序博客网 时间:2024/06/05 08:54
1.拦截请求参数
@Component @Aspect public class Ascpect { private static final Logger log = LogManager.getLogger(Ascpect .class); @Pointcut("execution(* com.google.lvyou.controller.*.*(..))") public void aopMethod(){} @Around("aopMethod()") public Object bindCacheableAdvice(ProceedingJoinPoint pjp) throws Throwable { Object[] args = joinPoint.getArgs(); List<String> argList = Arrays.stream(args) .map(arg -> { return arg + "/更换参数"; }) .collect(Collectors.toList()); args = argList.toArray(); return joinPoint.proceed(args) ; } }
2.拦截注解
eg:@requestMapping
@Component @Aspect public class Ascpect { private static final Logger logger = LogManager.getLogger(Ascpect .class); // @Pointcut("execution(* com.google.lvyou.controller.*.*(..))") // public void aopMethod(){} @Around("@annotation(requestMapping)") public Object bindCacheableAdvice(ProceedingJoinPoint pjp, RequestMapping requestMapping) throws Throwable { Method method = ((MethodSignature)pjp.getSignature()).getMethod(); log.debug("CacheAroundAdvice invoke start, method=" + method); Object[] args = pjp.getArgs(); log.debug("CacheAroundAdvice invoke, args=" + Arrays.toString(args)); /** * 调用proceed没有参数,隐含地将原始参数传递给底层方法。 * 从用户的角度来看proceed(),pjp.proceed(pjp.getArgs())做同样的事情。 * pjp.proceed(new Object[] {...})只有当你想覆盖参数时,你才需要调用。 */ return pjp.proceed(); //return pjp.proceed(pjp.getArgs()); } }
3.拦截request
@Component @Aspect public class Ascpect { private static final Logger logger = LogManager.getLogger(Ascpect .class); /** * 捕获所有controller层的方法 */ @Pointcut("execution(* com.google.lvyou.controller.*.*(..))") public void allControllerMethod(){} @Around("allControllerMethod()") public Object bindCacheableAdvice(ProceedingJoinPoint pjp) throws Throwable { HttpServletRequest request =((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest(); String requestUrl = request.getScheme() //当前链接使用的协议 +"://" + request.getServerName()//服务器地址 + ":" + request.getServerPort() //端口号 + request.getContextPath() //应用名称,如果应用名称为 + request.getServletPath() //请求的相对url -->可作log记录:path(即:requestMapping路径) + "?" + request.getQueryString(); //请求参数 return pjp.proceed(); } }
4.拦截所有异常
即:从进入Controller ——> Service ——> Dao 整个过程中的异常! 有需要抛异常的尽管往上层抛即可,会一并在Controller层最后被AOP捕捉到!
@Component @Aspect public class LvyouExceptionHandler { private static final Logger logger = LogManager.getLogger(LvyouExceptionHandler .class); /** * 捕获所有controller层的方法 */ @Pointcut("execution(* com.google.lvyou.controller.*.*(..))") public void controller(){} @Around("controller()") public Object doBefore(ProceedingJoinPoint pjp) { try { return pjp.proceed(); } catch (Throwable throwable) { logger.error("LvyouExceptionHandler : " , throwable); if (throwable instanceof LvyouException) { return ResultBOBean.ofError(throwable.getMessage()); } else if (throwable instanceof IllegalArgumentException) { return ResultBOBean.ofError(throwable.getMessage()); } else if (throwable instanceof NullPointerException) { return ResultBOBean.ofError(throwable.getMessage()); } else if (throwable instanceof UnirestException) { return ResultBOBean.ofError("连接超时,请稍后重试!"); } else if (throwable instanceof BadSqlGrammarException) { return ResultBOBean.ofError("糟糕,出错啦!"); } else if (throwable instanceof RuntimeException) { return ResultBOBean.ofError("糟糕,出错啦!"); } else { String errorMsg = throwable.toString() == null ? throwable.getMessage() : throwable.toString() ; return ResultBOBean.ofError(errorMsg == null || errorMsg.equals("") ? "未知错误" : throwable.toString()); } } } }
基本就这些了,更多的等想到再补吧!
阅读全文
0 0
- AOP拦截常用请求内容
- 使用aop拦截请求返回信息
- resteasy拦截器,拦截rest请求,修改response header内容
- Spring AOP拦截对Controller的请求时的配置失败
- 使用 aop拦截 springMVC的controller并获取请求参数及返回结果
- Spring AOP拦截对Controller的请求时的配置失败
- Spring aop拦截springmvc的controller请求方法,添加日志和统计方法执行时间
- Spring Boot AOP之对请求的参数入参与返回结果进行拦截处理
- AOP拦截DispatchAction
- aop拦截action
- Spring AOP(拦截)
- Spring AOP 拦截
- Spring AOP 拦截
- Spring aop拦截器
- 日志AOP拦截Controller
- springboot-aop访问拦截
- AOP方法级拦截
- spring aop拦截action
- MyBatis源代码--数据源(dataSource)
- 解决CentOS7关闭/开启防火墙出现Unit iptables.service failed to load: No such file or directory.
- 如何恢复Mac的OS X系统?
- python 中 sorted() 和 list.sort() 的用法
- 三层架构的优缺点
- AOP拦截常用请求内容
- Git
- 前端常用技术中文文档地址
- css设计页面-用户行为
- http,servlet,jsp-java web后台知识简单总结
- 堆排序算法
- QML文件之间的参数互相调用问题
- Java检测文件编码
- MyBatis-dataSource(数据源)