说明
项目笔记,仅供个人参考
切面
/**
* 利用AOP处理敏感词过滤的逻辑
*/
@Aspect
@Component
public class SensitiveAspect {
@Autowired
SensitiveService sensitiveService;
@Pointcut("execution(public * com.company.project.controller..*.*(..))")
public void sensitiveWord() {
}
@Before("sensitiveWord()")
public void doBefore(JoinPoint joinPoint) {
if (joinPoint.getArgs().length > 0) {
for (Object o : joinPoint.getArgs()) {
if (o instanceof HttpServletRequest || o instanceof HttpServletResponse) {
continue;
}
if(o!=null){
String body = new JSONObject(o).toString();
String flag = sensitiveService.checkSensitiveWordPass(body);
if (!SensitiveService.CHECK_SENSITIVE_WORD_PASS.equals(flag)) {
throw new IllegalArgumentException(SensitiveService.SENSITIVE_WARNNING + flag);
}
}
}
}
}
@AfterReturning(returning = "ret", pointcut = "sensitiveWord()")
public void doAfterReturning(Object ret) {
}
}
全局异常处理
/**
* 拦截处理【敏感词切面】抛出的 IllegalArgumentException 异常
* @author xujiahong
*/
@ControllerAdvice
public class SensitiveControllerAdvice {
private static final Logger log = LoggerFactory.getLogger(SensitiveControllerAdvice.class);
@ExceptionHandler({IllegalArgumentException.class})
@ResponseBody
public Result error(IllegalArgumentException e, HttpServletResponse response) {
if (e.getMessage().contains(SensitiveService.SENSITIVE_WARNNING)) {
return Result.returnFail(e.getMessage());
} else {
response.setStatus(500);
log.error("全局异常", e);
return Result.returnException(null, e);
}
}
}