天天看點

spring前置AOP攔截action

<!-- 實作BEFORE通知 配置 -->

   <bean id="autoProxyCreator"

   class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean>

<bean id="checkCustomerBefore" class="com.egt.struts.action.CheckCustomerAction"></bean>

<bean id="checkCustomerBeforeAdvisor"

   class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">

   <property name="advice">

    <ref bean="checkCustomerBefore" />

   </property>

   <property name="patterns">

   <value>.*.execute</value>

   </property>

</bean>

CheckCustomerAction 方法

package com.egt.struts.action;

import java.lang.reflect.Method;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import org.apache.log4j.Priority;

import org.apache.struts.action.ActionMapping;

import org.springframework.aop.MethodBeforeAdvice;

import com.egt.repository.Customer;

public class CheckCustomerAction implements MethodBeforeAdvice {

private Logger logger = Logger.getLogger(this.getClass().getName());

public void before(Method method, Object[] args, Object target)

    throws Throwable {

   System.out.println("test1");

   logger.log(Priority.INFO, "customer權限控制攔截...");

   System.out.println("test2");

   HttpServletRequest request = (HttpServletRequest) args[2];

   HttpServletResponse response = (HttpServletResponse) args[3];

   HttpSession session = request.getSession();

   ActionMapping mapping = (ActionMapping) args[0];

   if (session.getAttribute("customer") == null) {

    System.out.println("test3");

    try {

     String url = request.getContextPath() + "/index.jsp";

     response.sendRedirect(url);

    } catch (Exception e) {

     System.out.println("test4");

    }

   }

}

}

如果我們每次調用到action裡面的execute方法時就會調用攔截器進行攔截判斷,

public void before(Method method, Object[] args, Object target)

method指攔截的方法,Object[] args指攔截的方法對應的參數,target指攔截的對象

繼續閱讀