springmvc之配置攔截器攔截相應的請求


在springmvc.xml文件中配置:

    <mvc:interceptors>
        <!-- 配置自定義的攔截器 -->
        <bean class="com.gong.springmvc.interceptors.FirstInterceptor"></bean>
        <mvc:interceptor>
            <mvc:mapping path="/emps"/>
            <bean class="com.gong.springmvc.interceptors.SecondInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

FirstInterceptor.java

package com.gong.springmvc.interceptors;

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

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class FirstInterceptor implements HandlerInterceptor{
    
    //該方法在目標方法之前被調用
    //如果返回true,則繼續調用后續的攔截器和目標方法,若為false,則不會在調用后續的攔截器和目標方法
    //該方法可以考慮做權限、日志、事務等
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        System.out.println("[FirstInterceptor] preHandle");
        return true;
    }
    
    //調用目標方法之后,但在渲染視圖之前被調用
    //可以修改請求域中的屬性或視圖做出修改
    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("[FirstInterceptor] postHandle");
    }

    //在渲染視圖之后被調用
    //釋放資源
    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("[FirstInterceptor] afterCompletion");
    }

}

SecondInceptor.java

package com.gong.springmvc.interceptors;

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

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class SecondInterceptor implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        System.out.println("[SecondInterceptor] preHandle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("[SecondInterceptor] postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("[SecondInterceptor] afterCompletion");
    }

}

在<mvc:mapping path="/emps"/>中可以配置攔截的url地址。

在<mvc:exclude-mapping path=""/>中可以配置不攔截的url地址。

像這種定義在<mvc:interceptors>下的<bean class="com.gong.springmvc.interceptors.FirstInterceptor"></bean>,沒有指定是否攔截,則默認所有請求都調用該攔截器。

在<mvc:interceptor>下使用<mvc:mapping path="/emps"/>表明要攔截該地址,調用的攔截器是SecondInterceptor。

比如說,我們如果請求地址是/emps,那么兩個攔截器都會被調用,在控制台可以看到:

如果請求地址不是/emps,那么只會調用FirstInterceptor攔截器:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM