spring-interceptor-01

配置

    <mvc:interceptors>
        <mvc:interceptor>
            <!-- 针对于那个路劲下的内容进行拦截,这个路劲同资源文件的定位符  -->
            <mvc:mapping path="/pages/**/*.action"/> 
            <bean class="cn.mldn.interceptor.MyInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>

实现

package cn.mldn.interceptor;

import java.lang.reflect.Method;

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

import org.springframework.core.MethodParameter;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class MyInterceptor implements HandlerInterceptor {
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("[*** preHandle ] cls = " + handler.getClass());
        // 1 必须转型为HandlerMethod类的对象之后才可以知道操作的是那个Action,是那个具体的操作方法
        HandlerMethod handlerMethod = (HandlerMethod) handler ;
        // 2、拼凑读取资源文件中key的内容
        String validatorKey = handlerMethod.getBeanType().getSimpleName()+"."+handlerMethod.getMethod().getName()+".rules";
        // 3、取得Action类中对应的getMsgSource()方法
        Method msgSourceMethod = handlerMethod.getBean().getClass().getMethod("getSourceMessage",String.class);
        // 4、取得具体的验证规则
        String validateContent = (String) msgSourceMethod.invoke(handlerMethod.getBean(),validatorKey);
        if(validateContent == null || "".equals(validateContent)) {
            return true ;
        }
        else {
            
        }
        //5、针对于每一个具体的操作进行验证处理
        String rules [] = validateContent.split("\\|"); //实现数据的拆分处理操作
        
        
        // 5、取得所有的提交参数
        MethodParameter mp [] = handlerMethod.getMethodParameters() ;
        for (int x = 0 ; x < mp.length ; x ++) {
            System.out.println(mp[x].getMethod() + "," + mp[x].getParameterName() + "," + mp[x].getParameterType());
        }
        
        System.out.println(" validateContent = " + validateContent);

        System.out.println("[*** preHandle] bean = " + handlerMethod.getBean().getClass());
        System.out.println("[*** preHandle] beanType = " + handlerMethod.getBeanType());
        System.out.println("[*** preHandle] method = " + handlerMethod.getMethod());

        return true;  //如果不返回true表示截停,不在执行后续的控制层操作
    }
    
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("[*** afterCompletion ] cls = " + handler.getClass());

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
            throws Exception {
        System.out.println("[*** postHandle ] cls = " + handler.getClass());

    }

}

猜你喜欢

转载自www.cnblogs.com/blog-747674599/p/10055485.html