A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

问题   拦截成功为什么会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();

    }

总结没有返回值导致重定向


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马