`

spring3 mvc 添加aop支持(Spring MVC 注解下Controller 的AOP)

阅读更多
	<bean id="auth" class="com.leo.security.MyDecisoinVoter">
	</bean>
	<aop:config proxy-target-class="true">
		<aop:aspect id="authAspect" ref="auth">
			[color=red]<aop:pointcut id="authP" expression="execution(* com.leo.control.*.*(..))" />[/color]
			<aop:around pointcut-ref="authP" method="authPermission" />
		</aop:aspect>
	</aop:config>



import java.lang.reflect.Method;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.ModelAndView;

public class MyDecisoinVoter {

	/**
	 * 得到request的方法 1.HttpServletRequest request = ((ServletRequestAttributes)
	 * RequestContextHolder .getRequestAttributes()).getRequest(); 2.如下
	 */
	@Autowired(required = true)
	private HttpServletRequest request;

	public Object authPermission(JoinPoint joinPoint) throws Throwable {
		MethodInvocationProceedingJoinPoint methodJoinPoint = (MethodInvocationProceedingJoinPoint) joinPoint;
		MethodSignature methodSignature = (MethodSignature) methodJoinPoint
				.getSignature();
		Method method = methodSignature.getMethod();

		int range = Integer.parseInt(request.getParameter("range"));
		if (range > 10)
			return new ModelAndView("addUserInput");
		return new ModelAndView("index");
	}


}


在使用spring mvc时,通常用它的aop来记录日志(或者拦截其它的操作),但在spring mvc采用@Controller注解时,对Controller进行Aop拦截不起作用(上面的配置不起作用,<aop:pointcut id="authP" expression="execution(* com.leo.control.*.*(..))" />上面的红色是配置自己controller所有的方法),原因是该注解的Controller已被spring容器内部代理了.


查网上的资料如下两种配置起作用
1.xml
	<bean id="auth" class="com.leo.security.MyDecisoinVoter">
	</bean>
	<aop:config proxy-target-class="true">
		<aop:aspect id="authAspect" ref="auth">
			<aop:pointcut id="authP"
				expression="execution(* org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(..))" />
			<aop:around pointcut-ref="authP" method="authPermission" />
		</aop:aspect>

	</aop:config>

2.annonation

package com.autoabacus.dal.controller;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class Aop {
	public Aop() {
		System.out.println("Aop");
	}
	// @Around("within(org.springframework.web.bind.annotation.support.HandlerMethodInvoker..*)")
	@Around("execution(* org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(..))")
	public Object aa(ProceedingJoinPoint pjp)  throws Throwable 
	{
		try {
			Object retVal = pjp.proceed();
			System.out.println(retVal);
			return retVal;
		} catch (Exception e) {
			System.out.println("异常");
			return null;
		}
	}
}
分享到:
评论
5 楼 snihcel 2014-07-29  
expression="execution(* org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(..))"

你这个配置可行吗?你切入点在那里,要对哪个方法进行切入????????????
4 楼 xuxiangpan888 2012-12-23  
weaponhuang 写道
确定AOP能对conttoler进行拦截????这个我搞了好几天了,似乎不行。你已经成功拦截到了.......???

我上边的 配置可能还有问题 ,好像不要那么搞
3 楼 weaponhuang 2012-12-21  
确定AOP能对conttoler进行拦截????这个我搞了好几天了,似乎不行。你已经成功拦截到了.......???
2 楼 huangyunbin 2012-08-01  
你在你的项目中试验过吗?我在我的项目中试了下,不行啊。
然后我是用springmvc的拦截器解决的。
1 楼 梅花簪 2012-06-08  
方法斯蒂芬

相关推荐

    Spring Mvc AOP通过注解方式拦截controller等实现日志管理

    在Spring MVC框架中,AOP(面向切面编程)是一种强大的工具,用于实现跨切面的关注点,如日志管理。本教程将详细介绍如何利用注解来配置和使用AOP来拦截Controller层的方法,以便记录执行过程中的相关信息,实现日志...

    spring MVC AOP注解方式如何拦截controller 例子

    本文将详细介绍如何使用AspectJ注解在Spring MVC中实现AOP拦截Controller方法,并提供一个具体的例子。 首先,我们需要了解Spring AOP的基础概念。AOP允许我们定义“切面”,这些切面包含了业务逻辑中横切关注点的...

    Spring-MVC-aop.zip

    在本文中,我们将深入探讨如何使用Spring MVC框架中的AOP(面向切面编程)特性,结合注解方式来实现对Controller层的拦截,以便进行日志管理。这是一项非常实用的技术,可以帮助开发者追踪和记录应用程序的关键操作...

    Spring3 MVC 深入研究

    《Spring3 MVC 深入研究》 Spring3 MVC是Spring框架的重要组成部分,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。本篇文章将深入探讨Spring3 MVC的核心概念、工作原理以及如何在实际项目中...

    Spring MVC AOP通过注解方式拦截Controller等实现日志管理demo版本2

    本项目"Spring MVC AOP通过注解方式拦截Controller等实现日志管理demo版本2"是基于注解的AOP实践,旨在帮助开发者了解如何利用AOP来记录应用程序中的关键操作日志。以下是关于这个主题的详细解释: 1. **Spring AOP...

    最全最经典spring-mvc教程

    另外,Spring MVC与Spring框架的其他组件无缝集成,如Spring AOP(面向切面编程)用于实现日志、事务管理等功能,Spring JDBC和MyBatis等持久层框架用于数据库操作,以及Spring Data JPA、Hibernate等ORM工具,使得...

    Spring IOC AOP MVC 简单例子

    Spring框架是Java开发中不可或缺的一部分,它以模块化的方式提供了许多功能,如依赖注入(IOC)、面向切面编程(AOP)以及Model-View-Controller(MVC)架构模式。在本实例中,我们将深入探讨这三个核心概念以及它们...

    spring3 mvc jar

    1. ** annotations增强**:Spring 3大幅增强了对注解的支持,包括@Controller、@RequestMapping、@Service、@Repository等,使得配置文件大大简化,代码更易读。 2. ** RESTful支持**:通过@PathVariable、@Matrix...

    spring mvc + spring + hibernate 全注解整合开发视频教程 12

    此外,Spring还提供了AOP(面向切面编程)功能,允许我们在不修改原有代码的情况下添加横切关注点,如事务管理。 Hibernate是一个流行的Java持久化框架,它简化了数据库操作,使得开发者可以使用对象关系映射(ORM...

    spring-webmvc-5.0.9 jar包、源码和javadoc

    在Spring Web MVC中,Controller是实现业务逻辑的关键组件,通常由实现了Controller接口或使用@Controller注解的类组成。它们接收请求,调用服务层方法处理业务,然后将结果封装到Model对象中。Model对象包含了用于...

    springMVC AOP拦截拦截Controller等实现日志管理

    在Spring MVC中,AOP(面向切面编程)是一种强大的工具,可以让我们在不修改代码的情况下,对程序的特定部分进行增强,例如日志记录、事务管理或性能监控。在这个场景中,我们将讨论如何利用AOP来实现Controller的...

    spring-mvc jar包

    在Spring MVC中,我们可以通过注解来简化控制器的编写,如@Controller、@RequestMapping、@GetMapping、@PostMapping等。这些注解使得控制器方法可以直接与URL映射,简化了配置。例如: ```java @Controller @...

    Spring Web MVC入门教程

    数据验证也是Web开发中的一个重要环节,Spring Web MVC提供了声明式的数据验证支持,它内置了多种验证约束和注解,帮助开发者在数据处理前进行校验,并提供了灵活的错误消息处理机制。 在视图解析方面,Spring Web ...

    Spring MVC jar包

    - **注解驱动开发**:2.5.6版本已经支持注解驱动,如@Controller、@RequestMapping、@RequestParam等,使得代码更简洁。 - **AOP集成**:Spring MVC与Spring的面向切面编程(AOP)无缝集成,可以方便地实现事务...

    学习Spring MVC,关于注解的Spring MVC,简单例子,关于控制器的Spring MVC,学习Spring,简单Spring MVC实例

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建RESTful应用程序提供了强大的支持。在本教程中,我们将深入探讨Spring MVC的核心概念,特别是关于注解的使用以及简单的控制器实现。 首先,Spring MVC的...

    Spring3 MVC 实例

    Spring3是Spring框架的一个版本,它引入了许多增强特性,如更丰富的注解支持和改进的类型安全依赖注入。 在Spring3MVC实例中,我们通常会创建以下组件: 1. **控制器(Controller)**:控制器使用`@Controller`...

    类似Spring Controller 注解Demo

    本文将深入探讨"类似Spring Controller注解Demo"这一主题,结合提供的标签"源码"和"工具",我们将分析Spring MVC中的Controller注解以及如何通过源码理解和应用它们。 Spring MVC是Spring框架的一部分,它提供了...

    spring3 mvc实例

    Spring3 MVC是一个强大的Java web开发框架,由Spring IO项目维护,它为构建基于模型-视图-控制器(MVC)架构的应用程序提供了全面的支持。在本实例中,我们将会探讨Spring3 MVC的核心特性、配置、控制器、视图解析...

    spring3mvc所需jar包

    在实际项目中,Spring 3 MVC通常与其他Spring模块(如Spring Core、Spring Beans、Spring AOP、Spring JDBC、Spring ORM等)结合使用,构建出完整的应用程序。例如,Spring JDBC和Spring ORM(如Hibernate、MyBatis...

    网上书城 spring-mvc

    11. **AJAX支持**:Spring-MVC可以通过`@ResponseBody`和`@RestController`注解,配合JSON序列化库(如Jackson或Gson),轻松实现异步请求处理。 12. **RESTful风格**:Spring-MVC支持创建RESTful API,通过HTTP...

Global site tag (gtag.js) - Google Analytics