项目中有对朋友圈和评论进行审核的功能,为了在不修改原有代码,想通过spring aop来完成对朋友圈和评论的审核工作。
在spring aop中使用@AspectJ注解来实现,代码如下:
@Aspect @Component public class CheckShareCircleSensitiveWordsAspect { private final static Logger logger = LoggerFactory.getLogger(CheckShareCircleSensitiveWordsAspect.class); /** * 处理朋友圈内容 * @Description TODO * @Date 2020/10/22 下午2:42 * @param joinPoint * @return java.lang.Object **/ @Around("execution(* com.vv.obj.sharecircle.app.controller.api.AppShareCircleController.publish(..))") public Object checkShareCircles(ProceedingJoinPoint joinPoint) { //前置处理 Object[] args = joinPoint.getArgs(); int length = args == null ? 0 : args.length; for (int i = 0; i < length; i++) { Object arg = args[i]; if (!(arg instanceof AppPublishEnterpriseUserShareRequest)) { continue; } //强制转换 AppPublishEnterpriseUserShareRequest request = (AppPublishEnterpriseUserShareRequest)arg; //检查敏感词并返回处理后的内容 String content = this.detailSensitiveWords(request.getContent()); //重新放回到request中 request.setContent(content); //将request重新放回args中 args[i] = request; } Object proceed = null; //将参数正式交给controller处理 try { proceed = joinPoint.proceed(args); } catch (Throwable throwable) { throwable.printStackTrace(); } logger.info("joinPoint.proceed 返回类型是否为 JsonResult :" + (proceed instanceof JsonResult)); return proceed; } /** * 处理敏感词,并返回 * @Description TODO * @Date 2020/10/22 下午2:51 * @param content * @return java.lang.String **/ private String detailSensitiveWords(String content) { //取出content检查是否存在敏感字词 logger.info("新发表的朋友圈内容为:" + content); return content; } /** * 处理朋友圈内容 * @Description TODO * @Date 2020/10/22 下午2:42 * @param joinPoint * @return java.lang.Object **/ @Around("execution(* com.vv.obj.sharecircle.app.controller.api.AppShareCircleController.publishShareComment(..))") public Object checkShareCircleComments(ProceedingJoinPoint joinPoint) { //前置处理 Object[] args = joinPoint.getArgs(); if (args != null) { } Object proceed = null; //将参数正式交给controller处理 try { proceed = joinPoint.proceed(args); } catch (Throwable throwable) { throwable.printStackTrace(); } return proceed; } }网上搜索各种,原因大多千篇一律:要么就是POM文件中缺少jar包依赖,如下:
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.9.4</version> </dependency>要么就是启动类中没有添加注解@EnableAspectJAutoProxy
实际验证发现,项目中既导入了对应的jar包,也添加了@EnableAspectJAutoProxy,还是不起作用。
非常感谢博主【panchanggui】博客地址: https://www.cnblogs.com/panchanggui/p/10761305.html
主要还是在刚开始创建Java类时,使用idea工具创建的是Aspect文件,然后后来从代码里面改成class文件的,根据上面博主的方式,重新创建一个Java类,代码考过去,编译重启,成功了。
