`
zwnJava
  • 浏览: 205942 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Sprinig MVC AOP拦截

阅读更多

由于项目用的是注解的方式进行注入的如:@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;
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics