由于项目用的是注解的方式进行注入的如:@Controller 所以在加AOP拦截的时候有时用其它方法拦截不到。
可通过如下方式进行拦截:
<bean id="aopAspect" class="com.test.aop.AopAspect"/> <aop:config> <aop:aspect ref="aopAspect"> <aop:pointcut id="businessController" expression="execution(* org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(..))"/> <aop:before method="doBefore" pointcut-ref="businessController"/> <aop:after method="doAfter" pointcut-ref="businessController"/> <aop:around method="doAround" pointcut-ref="businessController"/> <aop:after-throwing method="doThrowing" pointcut-ref="businessController" throwing="ex"/> </aop:aspect> </aop:config>
其中AopAspect.java的内容如下:
package com.test.aop; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; /* * JoinPoint介绍: * java.lang.Object[] getArgs():获取连接点方法运行时的入参列表; * Signature getSignature() :获取连接点的方法签名对象; * java.lang.Object getTarget() :获取连接点所在的目标对象; * java.lang.Object getThis() :获取代理对象本身; * * ReqestFacade、ResponseFacade、具体的Controller */ /** * 权限控制(切面类) */ public class AopAspect { public void doBefore(JoinPoint jp) throws Exception { HttpServletRequest request = null; HttpServletResponse response = null; Object[] objs = jp.getArgs(); System.out.println("-----------------log Begining method: " + jp.getClass().getName() + "." + jp.getSignature().getName()); for (Object o : objs) { System.out.println("args = " + o); if (o instanceof HttpServletRequest) { request = (HttpServletRequest) o; System.out.println("---------------servletPath----- " + request.getServletPath()); } } } public void doAfter(JoinPoint jp) throws Exception { System.out.println("-----------------log Ending method: " + jp.getClass().getName() + "." + jp.getSignature().getName()); } public Object doAround(ProceedingJoinPoint pjp) throws Throwable { long time = System.currentTimeMillis(); HttpServletRequest request = null; HttpServletResponse response = null; time = System.currentTimeMillis() - time; Object[] objs = pjp.getArgs(); for (Object o : objs) { if (o instanceof HttpServletRequest) { request = (HttpServletRequest) o; } if (o instanceof HttpServletResponse) { response = (HttpServletResponse) o; } } Object retVal = pjp.proceed(); System.out.println("-----------------around process time: " + time + " ms"); return retVal; } public void doThrowing(JoinPoint jp, Throwable ex) { System.out.println("-----------------throwing method " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName() + " throw exception"); System.out.println(ex.getMessage()); } /** * 判断是否为ajax请求 * @param request * @return true为ajax语法,false为其它。 */ private boolean isAjaxRequest(HttpServletRequest request) { if (request != null) { String requestType = request.getHeader("X-Requested-With"); if (requestType != null && "XMLHttpRequest".equals(requestType)) { return true; } } return false; } }
相关推荐
CXF使用EndpointImpl发布WebService加入拦截器
整合了ssh的基本开发步骤,把所有功能以及怎么实现需要的jai包作用全部包含在里面 配套一个案例包含增删改查
链接:https://pan.baidu.com/s/1v_OzU5Xv5EPzEmHTkLEPmg 提取码:m02f
框架sprinigmvc4.1.6+spring4.1.6+hibernate4.1.7+maven整合
包含springBoot+JPA的增删改查,含有条件查询,是学习springboot以及jpa入门的好demo