亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SSM項目中怎么使用攔截器和過濾器

發布時間:2022-03-01 13:54:45 來源:億速云 閱讀:186 作者:iii 欄目:開發技術

本篇內容介紹了“SSM項目中怎么使用攔截器和過濾器”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、攔截器概述

Spring MVC 也可以使用攔截器對請求進行攔截處理,用戶可以自定義攔截器來實現特定 的功能,自定義的攔截器必須實現 HandlerInterceptor 接口

  • preHandle():這個方法在業務處理器處理請求之前被調用,在該方法中對用戶請求 request 進行處理。如果程序員決定該攔截器對請求進行攔截處理后還要調用其他 的攔截器,或者是業務處理器去進行處理,則返回 true;如果程序員決定不需要 再調用其他的組件去處理請求,則返回 false。

  • postHandle():這個方法在業務處理器處理完請求后,但是 DispatcherServlet向客戶端返回響應前被調用,在該方法中對用戶請求 request 進行處理。

  • afterCompletion():這個方法在 DispatcherServlet 完全處理完請求后被調用,可以 在該方法中進行一些資源清理的操作。

二、攔截器配置步驟

1、創建一個攔截器(實現HandlerInterceptor接口)

package com.ssm.Interceptor;

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

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

//攔截器
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //獲取請求的URL
        String requestURI=request.getRequestURI();
        HttpSession session=request.getSession();
        Object userInfo=request.getSession().getAttribute("USERINFO");
        System.out.println("鏈接:"+requestURI+"進入攔截器");
        if(userInfo==null){ //表示未登錄就想進入系統
            //直接重定向到登錄界面
            String serverPath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/index.jsp";
            response.sendRedirect(serverPath);
            return false;
        }else{
            //登陸成功,不攔截
            return true;
        }

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("跳轉后攔截");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("渲染后攔截");
    }
}

這個攔截器我只是寫個Demo,所以只進行了是否登錄的驗證,真正的項目中你也可以在這里進行一些權限的判斷等等。

2、配置攔截器

<!--攔截器配置-->
	<mvc:interceptors>
		<!--后臺訪問攔截器-->
		<mvc:interceptor>
			<!--攔截所有資源-->
			<mvc:mapping path="/**"/>
			<!--登陸不攔截-->
			<mvc:exclude-mapping path="/user/login"/>
			<!--郵箱激活不攔截-->
			<mvc:exclude-mapping path="/user/activeEmail"/>
			<!--靜態資源的目錄不攔截-->
			<mvc:exclude-mapping path="/commons/**"/>
			<!--用戶通過郵箱中重置密碼的鏈接不攔截-->
			<mvc:exclude-mapping path="/email/resetPassword"/>
			<!--激活郵箱的驗證不攔截-->
			<mvc:exclude-mapping path="/user/validateCode"/>
			<!--實現攔截功能的類-->
			<bean class="com.ssm.Interceptor.LoginInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>

由于配置了<mvc:mapping path="/**"/>會攔截所有資源,我們必須用<mvc:exclude-mapping path="/這里寫你想放行的請求">標簽放行靜態資源和一些不用攔截的請求(登錄等等)。<bean class="com.ssm.Interceptor.LoginInterceptor"></bean>是第一步創建的攔截器。

3、測試下攔截器:

在地址欄輸入個非法的請求試試

通過地址欄可以看到,頁面已經被重定向到了登陸界面,攔截成功。
但是攔截器并不能攔截jsp頁面的訪問,這個時候兩種選擇:
1、將所有jsp頁面都放在WEB-INF目錄下
2、用Servlet過濾器(雖然感覺技術有點老了)

三、過濾器概述

Servlet過濾器主要用于對客戶端(瀏覽器)的請求進行過濾處理,然后將過濾后的請求轉交給下一資源。

四、過濾器配置步驟

1、創建一個過濾器(實現Filter接口)

package com.ssm.Filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

//自定義過濾器
public class LoginFilter implements Filter {
    //初始化方法
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
     //初始化處理
        System.out.println("過濾器初始化");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //過濾處理
        //servletRequest 是個接口,HttpServletRequest 是實現,但是有些方法是HttpServletRequest獨有的,如:getSession
        //HttpServletRequest接口是繼承servletRequest接口,增加了和http相關的方法
        HttpServletRequest request= (HttpServletRequest) servletRequest;
        HttpServletResponse response= (HttpServletResponse) servletResponse;
//        String requestURI=request.getRequestURI();
//        System.out.println("鏈接:"+requestURI+"進入過濾器");
        HttpSession session=request.getSession();
        if(session.getAttribute("USERINFO")==null){
            //非法請求,直接跳轉到登陸界面
            String serverPath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/index.jsp";
            response.sendRedirect(serverPath);
        }else{
            //正常登錄,放行
            filterChain.doFilter(request,response);
        }
    }

    @Override
    public void destroy() {
     //釋放資源
        System.out.println("過濾器銷毀");
    }
}

2、配置web.xml

<!--使用過濾器實現登陸控制-->
  <!--filter標簽用于聲明過濾器對象-->
  <filter>
    <!--過濾器名稱-->
    <filter-name>LoginFilter</filter-name>
    <!--過濾器完整類名-->
    <filter-class>com.ssm.Filter.LoginFilter</filter-class>
  </filter>
  <!--filter-mapping用于創建過濾器的映射,指定Web應用中,哪些URL應用哪一個過濾器進行處理-->
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <!--url-pattern用于指定過濾器應用的URL-->
    <!--過濾的頁面(自定義),這里對登錄界面就不要過濾了-->
    <url-pattern>/views/*</url-pattern>
  </filter-mapping>

各個標簽的解釋都寫在注釋里面了,至于需要過濾的資源,你可以根據自己的需求再添加<url-pattern>,我主要是想把views目錄下面的jsp全部過濾。

“SSM項目中怎么使用攔截器和過濾器”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ssm
AI

东丽区| 江安县| 宁武县| 海安县| 平乐县| 中卫市| 高安市| 绩溪县| 疏附县| 安陆市| 新余市| 成安县| 英山县| 锡林浩特市| 香河县| 方城县| 游戏| 神农架林区| 麻栗坡县| 大新县| 增城市| 开封市| 南木林县| 秦安县| 遂宁市| 四平市| 蛟河市| 雅江县| 宁乡县| 建德市| 吉木乃县| 财经| 湘阴县| 抚宁县| 巴青县| 台湾省| 高碑店市| 黔西| 明光市| 湟源县| 兴隆县|