`
zwnJava
  • 浏览: 208828 次
  • 性别: 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;
	}
}

 

分享到:
评论

相关推荐

    CXF使用EndpointImpl发布WebService加入拦截器

    拦截器在CXF中的工作原理基于JAX-WS规范,可以分为两种类型:`InInterceptors`(入站拦截器)和`OutInterceptors`(出站拦截器)。入站拦截器处理从客户端到服务器的消息,而出站拦截器则处理从服务器返回到客户端的...

    spring4+springmvc+hibernate4整合步骤详细解释

    整合了ssh的基本开发步骤,把所有功能以及怎么实现需要的jai包作用全部包含在里面 配套一个案例包含增删改查

    框架sprinigmvc4.1.6+spring4.1.6+hibernate4.1.7+maven整合

    Spring框架本身是一个全面的企业级应用开发框架,核心特性包括依赖注入(DI)、面向切面编程(AOP)和容器管理。Spring 4.1.6版本增强了对Java 8的支持,提供了更丰富的类型安全的配置选项,并提升了性能和稳定性。 ...

    SprinigBoot权限demo基本环境的框架.rar

    在"SprinigBoot权限demo基本环境的框架.rar"中,我们可能找到了一个基础的SpringBoot项目,该项目已经配置了Spring Security,用于演示如何在SpringBoot应用中实现权限管理。这个压缩包可能包含了以下关键文件: 1....

    Spring Boot中六种批量更新策略:效率对决与实测.zip

    在大数据量、高并发的场景下,批量更新数据库是一个常见的操作。然而,不同的批量更新方法可能带来截然不同的性能表现。 通过实际测试对比了Spring Boot中6种MySQL批量更新方式的效率,并详细记录了每种方法在处理...

    SpringBoot+Vue+kkFileView实现文档管理(文档上传、下载、在线预览)示例代码

    SpringBoot+Vue+kkFileView实现文档管理(文档上传、下载、在线预览)示例代码: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/128283542 import com.ruoyi.system.utils.FileUtils,此类见若依开发...

    SpringBoot+JPA.zip

    SpringBoot+JPA是一个流行的Java开发框架组合,用于构建高效、简洁的应用程序。SpringBoot简化了Spring应用的初始设置和配置,而Java Persistence API (JPA) 是Java平台上的一个标准,用于对象关系映射(ORM),使得...

Global site tag (gtag.js) - Google Analytics