java之spring mvc之攔截器


1. springmvc 中的攔截器是由實現 HandlerInterceptor 或者繼承 HandlerInterceptorAdapter 來實現的。

2. 自定義實現一個攔截器的步驟:

a). 定義一個實現 HandlerInterceptor 接口 的類

public class MyInterceptor implements HandlerInterceptor{
    /**
     * 在處理方法之前執行,一般用來做一些准備工作:比如日志,權限檢查
     * 如果返回false 表示被攔截,將不會執行處理方法
     * 返回true繼續執行處理方法
     */
    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
        System.out.println("執行preHandler---------"+req.getRemoteHost()+req.getRemoteUser());
        resp.sendRedirect("index.jsp");
        return false;
    }
    /**
     * 在處理方法執行之后,在渲染視圖執行之前執行,一般用來做一些清理工作
     */
    @Override
    public void postHandle(HttpServletRequest req, HttpServletResponse resp, Object handler, ModelAndView mv)
            throws Exception {
        System.out.println("執行postHandler");
    }
    /**
     * 在視圖渲染后執行 一般用來釋放資源 */
    @Override
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        System.out.println("執行afterCompletion");
    }
}

b) 在 springmvc 的配置文件中 ,添加攔截器配置

<mvc:interceptors>
        <!-- 定義一個攔截器的配置 -->
        <mvc:interceptor>
            <!-- mapping 指定哪些url被攔截 
                /*表示根路徑下的所有請求被攔截-/hello.do
                /**表示根路徑及其子路徑下的所有請求被攔截/user/add.do
            -->
            <mvc:mapping path="/**"/>
            <!-- 配置攔截器的路徑 -->
            <bean class="cn.sxt.interceptor.MyInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

c) 測試

3. 登錄攔截器實現

public class LoginInterceptor extends HandlerInterceptorAdapter{
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        
        //驗證請求的地址是否是登錄地址  如果是繼續往下執行
        String uri=request.getRequestURI();
        uri = uri.substring(uri.lastIndexOf("/")+1);
        if(uri.equals("login.do")){
            return true;
        }
        //驗證session中是否有用戶存在 如果有  繼續執行
        if(request.getSession().getAttribute("username")!=null){
            return true;
        }
        //執行跳轉到登錄頁面
        response.sendRedirect(request.getContextPath()+"/login.jsp");
        return false;
    }
}

 


免責聲明!

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



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