用Spring AOP拦截页面请求

注:开发环境为Spring+Spring MVC+myBatis 均为注解开发

从登陆页面发起的请求,与正常的请求无误
//登陆请求。

function login() {var layerIndex = layer.load();log();$("#formLogin").ajaxSubmit(function(data) {if (typeof data == "string") {data = JSON.parse(data);}layer.close(layerIndex);if (data.state == true) {showToastr('登陆验证', '登录成功</br>即将进行跳转!', 2, 2000, '', true, 5);setTimeout(function() {window.location.href = "${ctx}/mainController/main.com";}, 2000);} else {resetIdentity();/* layer.msg(data.msg); *///5默认1; 1:右上,2:右下,3:左下,4:左上,5:顶部全宽,6:底部全宽,7:顶部居中,8:底部居中showToastr('登陆验证', data.msg, 4, 2000, true, true, 5);//标题-提示内容-样式(1冒泡蓝2√绿3!黄4!红)-时间-关闭按钮-进度条-位置}});}
//定义切面类
public class MyVerifyAopAspect {//Spring注入@Autowiredprivate ILogService iLogService;public MyVerifyAopAspect() {System.err.println("验证切面类初始化");}//定义切点//execution(返回任意类型* 方法所属的位置com.ss.web.*.* (任意参数..))@Pointcut("execution (* com.ss.web.loginController.login(..))")private void myPointCut() {}// 前置通知。在目标方法执行前执行该方法@Before(value="myPointCut()")private void myBefor(JoinPoint joinpoint) {System.out.println("验证前置通知");System.err.print("目标:"+joinpoint.getTarget() );System.out.print("方法名称:"+joinpoint.getSignature().getName());System.out.println("参数名:"+((CodeSignature) joinpoint.getSignature()).getParameterNames()[0]);System.out.println("参数名:"+((Object[])joinpoint.getArgs())[0]);}
}

重点:在applicationContext.xml中配置启动AspectJ自动代理由于Spring与SpringMVC的容器关系,将拦截不到页面发起的请求。以此需要将配置启动AspectJ自动代理配置到spring-mvc.xml中。即将以下代码加入到spring-mvc.xml中

<!-- 启动AspectJ自动代理 proxy-target-class="true"没有or是or否共三种状态-->
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

用Spring AOP拦截页面请求

注:开发环境为Spring+Spring MVC+myBatis 均为注解开发

从登陆页面发起的请求,与正常的请求无误
//登陆请求。

function login() {var layerIndex = layer.load();log();$("#formLogin").ajaxSubmit(function(data) {if (typeof data == "string") {data = JSON.parse(data);}layer.close(layerIndex);if (data.state == true) {showToastr('登陆验证', '登录成功</br>即将进行跳转!', 2, 2000, '', true, 5);setTimeout(function() {window.location.href = "${ctx}/mainController/main.com";}, 2000);} else {resetIdentity();/* layer.msg(data.msg); *///5默认1; 1:右上,2:右下,3:左下,4:左上,5:顶部全宽,6:底部全宽,7:顶部居中,8:底部居中showToastr('登陆验证', data.msg, 4, 2000, true, true, 5);//标题-提示内容-样式(1冒泡蓝2√绿3!黄4!红)-时间-关闭按钮-进度条-位置}});}
//定义切面类
public class MyVerifyAopAspect {//Spring注入@Autowiredprivate ILogService iLogService;public MyVerifyAopAspect() {System.err.println("验证切面类初始化");}//定义切点//execution(返回任意类型* 方法所属的位置com.ss.web.*.* (任意参数..))@Pointcut("execution (* com.ss.web.loginController.login(..))")private void myPointCut() {}// 前置通知。在目标方法执行前执行该方法@Before(value="myPointCut()")private void myBefor(JoinPoint joinpoint) {System.out.println("验证前置通知");System.err.print("目标:"+joinpoint.getTarget() );System.out.print("方法名称:"+joinpoint.getSignature().getName());System.out.println("参数名:"+((CodeSignature) joinpoint.getSignature()).getParameterNames()[0]);System.out.println("参数名:"+((Object[])joinpoint.getArgs())[0]);}
}

重点:在applicationContext.xml中配置启动AspectJ自动代理由于Spring与SpringMVC的容器关系,将拦截不到页面发起的请求。以此需要将配置启动AspectJ自动代理配置到spring-mvc.xml中。即将以下代码加入到spring-mvc.xml中

<!-- 启动AspectJ自动代理 proxy-target-class="true"没有or是or否共三种状态-->
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>