Springmvc AOP拦截Controller获取session(自定义注解的方式)

来源:互联网 发布:汪峰 知乎 编辑:程序博客网 时间:2024/05/26 20:20
第一步创建

packageorg.cyxl.spring.controller;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpSession;

importorg.springframework.stereotype.Controller;

importorg.springframework.web.bind.annotation.RequestMapping;

@Controller

@RequestMapping(value="/test.action")

public class TestController {

  @RequestMapping(params="m=save")

  public void testduo(HttpServletRequest request,HttpServletResponse response,HttpSession httpSession)

  {

    System.out.println("abc");

    httpSession.setAttribute("testsession","testsession");

    System.out.println(httpSession.getAttribute("testsession"));  

  }

}

第二步创建

packageorg.cyxl.spring.aop;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpSession;

importorg.aspectj.lang.JoinPoint;

importorg.aspectj.lang.ProceedingJoinPoint;

importorg.aspectj.lang.annotation.AfterReturning;

importorg.aspectj.lang.annotation.AfterThrowing;

importorg.aspectj.lang.annotation.Around;

importorg.aspectj.lang.annotation.Aspect;

importorg.aspectj.lang.annotation.Before;

importorg.aspectj.lang.annotation.Pointcut;

importorg.springframework.web.context.request.RequestContextHolder;

importorg.springframework.web.context.request.ServletRequestAttributes;

@Aspect 

public class LogAspect {

   // 任何通知方法都可以将第一个参数定义为 org.aspectj.lang.JoinPoint类型 

  @Pointcut("execution(*org.cyxl.spring.controller.*.*(..))"

    private void anyMethod(){}//定义一个切入点 

  @Before("anyMethod()"

    public void doAccessCheck(JoinPoint call){ 

    String clazz =call.getTarget().getClass().getName(); 

        // 获取目标对象上正在执行的方法名 

        String methodName =call.getSignature().getName(); 

        System.out.println("前置通知:" + clazz +"类的" + methodName +"方法开始了...");

        System.out.println("前置通知"); 

        HttpServletRequest request =((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 

        HttpSession session =request.getSession(); 

        System.out.println(session.getAttribute("testsession"));

    } 

    @AfterReturning("anyMethod()"

    public void doAfter(){ 

        System.out.println("后置通知"); 

    } 

    @AfterThrowing("anyMethod()"

    public void doAfterThrow(){ 

        System.out.println("例外通知"); 

    } 

    @Around("anyMethod()"

    public Object doBasicProfiling(ProceedingJoinPointpjp)throws Throwable{ 

        System.out.println("进入环绕通知"); 

        Object object = pjp.proceed();//执行该方法 

        System.out.println("退出方法"); 

        return object; 

    }  }

第三部

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jee="http://www.springframework.org/schema/jee"

  xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"

  xmlns:aop="http://www.springframework.org/schema/aop"xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.1.xsd

  http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.1.xsd

  http://www.springframework.org/schema/jeehttp://www.springframework.org/schema/jee/spring-jee-4.1.xsd

  http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.1.xsd

  http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-4.1.xsd

  http://www.springframework.org/schema/mvc 

   http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">

    <!-- ioc注解 -->

  <context:component-scanbase-package="org.cyxl.spring.controller"></context:component-scan>

     <aop:aspectj-autoproxy/>

     <bean id="myInterceptor"  class="org.cyxl.spring.aop.LogAspect"/>

</beans>

第四步

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jee="http://www.springframework.org/schema/jee"

  xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"

  xmlns:aop="http://www.springframework.org/schema/aop"xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.1.xsd

  http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.1.xsd

  http://www.springframework.org/schema/jeehttp://www.springframework.org/schema/jee/spring-jee-4.1.xsd

  http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.1.xsd

  http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-4.1.xsd

  http://www.springframework.org/schema/mvc 

   http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">

  <!-- 可以扫描controllerservice...

  这里让扫描controller,指定controller的包

   -->

  <context:component-scanbase-package="org.cyxl.spring.controller"></context:component-scan>

  <!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置-->

  <!–通知spring使用cglib而不是jdk的来生成代理方法 AOP可以拦截到Controller-> 

    <aop:aspectj-autoproxyproxy-target-class="true"/> 

<mvc:annotation-driven></mvc:annotation-driven>

    <!-- 视图解析器

  解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包

   -->

  <bean

  class="org.springframework.web.servlet.view.InternalResourceViewResolver">

    <!-- 配置jsp路径的前缀 -->

    <propertyname="prefix"value="/WEB-INF/jsp/"/>

    <!-- 配置jsp路径的后缀 -->

    <propertyname="suffix"value=".jsp"/>

  </bean>

  <!-- 文件上传 -->

  <beanid="multipartResolver"

  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

    <!-- 设置上传文件的最大尺寸为5MB -->

    <propertyname="maxUploadSize">

      <value>5242880</value>

    </property>

  </bean>

  <!-- 拦截器 -->

  <!--

  <mvc:interceptors>

     <mvc:interceptor>

       <mvc:mapping path="/**" />

       <beanclass="com.interceptor.LoginInterceptor"></bean>

     </mvc:interceptor>

  </mvc:interceptors>

   -->

</beans>


阅读全文
0 0
原创粉丝点击