问题 拦截成功为什么会404 springMVC 控制器方法一般是有返回值的,除了那些转发重定向的方法之外,转发重定向的方法,往往被拦截后是不会404
将下面一个切面类改成 环绕通知就会报404
[AppleScript] 纯文本查看 复制代码 /**
* 日志切面类
*/
@Component("logAop")
@Aspect
public class LogAop {
// 目标对象的字节码
private Class clazz;
// 方法名称
private String methodName;
// HttpServletRequet
@Autowired
private HttpServletRequest httpServletRequest;
// 系统日志service
@Autowired
private SysLogService sysLogService;
/**
* 前置通知
* 1.环绕通知:ProceedingJoinPoint(只能用于环绕通知)
*
* 2.通过JoinPoint可以获取到目标对象相关的信息
*
*/
@Before("execution(* cn.itheima.ssm.controller..*.*(..))")
public void beforeLog(JoinPoint jp){
// 1.当前执行的类的全路径
clazz = jp.getTarget().getClass();
// 转换成字符串名称
String className = clazz.getName();
// 2.当前执行的方法名称
methodName = jp.getSignature().getName();
methodName = className+"."+methodName;
}
/**
* 最终通知
*/
@After("execution(* cn.itheima.ssm.controller..*.*(..))")
public void afterLog(){
// 创建日志对象
SysLog sysLog = new SysLog();
// 访问时间
sysLog.setVisitTime(new Date());
// ip地址
sysLog.setIp(httpServletRequest.getRemoteAddr());
// 用户名称(spring security)
// 1.获取security上下文对象
SecurityContext context = SecurityContextHolder.getContext();
// 2.获取认证对象
Authentication authentication = context.getAuthentication();
// 3.取出用户对象
User user = (User)authentication.getPrincipal();
sysLog.setUsername(user.getUsername());
// 操作的方法名称
sysLog.setMethod(methodName);
// 保存数据库
sysLogService.saveSysLog(sysLog);
}
}
改成如下机会404
[AppleScript] 纯文本查看 复制代码
@Around("execution(* cn.itheima.ssm.controller..*.*(..))")
public void Around(JoinPoint jp) {
beforeLog(jp);
//do...
afterLog();
}
总结没有返回值导致重定向
|