最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SSM項(xiàng)目中使用攔截器和過濾器的實(shí)現(xiàn)示例

 更新時(shí)間:2021年04月20日 09:20:00   作者:別團(tuán)等shy哥發(fā)育  
這篇文章主要介紹了SSM項(xiàng)目中使用攔截器和過濾器的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、攔截器概述

Spring MVC 也可以使用攔截器對請求進(jìn)行攔截處理,用戶可以自定義攔截器來實(shí)現(xiàn)特定 的功能,自定義的攔截器必須實(shí)現(xiàn) HandlerInterceptor 接口

  • preHandle():這個(gè)方法在業(yè)務(wù)處理器處理請求之前被調(diào)用,在該方法中對用戶請求 request 進(jìn)行處理。如果程序員決定該攔截器對請求進(jìn)行攔截處理后還要調(diào)用其他 的攔截器,或者是業(yè)務(wù)處理器去進(jìn)行處理,則返回 true;如果程序員決定不需要 再調(diào)用其他的組件去處理請求,則返回 false。
  • postHandle():這個(gè)方法在業(yè)務(wù)處理器處理完請求后,但是 DispatcherServlet向客戶端返回響應(yīng)前被調(diào)用,在該方法中對用戶請求 request 進(jìn)行處理。
  • afterCompletion():這個(gè)方法在 DispatcherServlet 完全處理完請求后被調(diào)用,可以 在該方法中進(jìn)行一些資源清理的操作。

二、攔截器配置步驟

1、創(chuàng)建一個(gè)攔截器(實(shí)現(xiàn)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+"進(jìn)入攔截器");
        if(userInfo==null){ //表示未登錄就想進(jìn)入系統(tǒng)
            //直接重定向到登錄界面
            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("跳轉(zhuǎn)后攔截");
    }

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

這個(gè)攔截器我只是寫個(gè)Demo,所以只進(jìn)行了是否登錄的驗(yàn)證,真正的項(xiàng)目中你也可以在這里進(jìn)行一些權(quán)限的判斷等等。

2、配置攔截器

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

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

3、測試下攔截器:

在地址欄輸入個(gè)非法的請求試試:

在這里插入圖片描述

在這里插入圖片描述

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

三、過濾器概述

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

四、過濾器配置步驟

1、創(chuàng)建一個(gè)過濾器(實(shí)現(xiàn)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 是個(gè)接口,HttpServletRequest 是實(shí)現(xiàn),但是有些方法是HttpServletRequest獨(dú)有的,如:getSession
        //HttpServletRequest接口是繼承servletRequest接口,增加了和http相關(guān)的方法
        HttpServletRequest request= (HttpServletRequest) servletRequest;
        HttpServletResponse response= (HttpServletResponse) servletResponse;
//        String requestURI=request.getRequestURI();
//        System.out.println("鏈接:"+requestURI+"進(jìn)入過濾器");
        HttpSession session=request.getSession();
        if(session.getAttribute("USERINFO")==null){
            //非法請求,直接跳轉(zhuǎn)到登陸界面
            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

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

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

3、測試過濾器

不登陸直接訪問后臺jsp頁面:

在這里插入圖片描述

訪問之后:

在這里插入圖片描述

可以看到,過濾器直接將請求重定向到了登陸界面,過濾器過濾成功。

五、總結(jié)

現(xiàn)在已經(jīng)有了很多權(quán)限管理的框架了,Shiro、Spring Security等等,以后盡量還是用新技術(shù)。

到此這篇關(guān)于SSM項(xiàng)目中使用攔截器和過濾器的文章就介紹到這了,更多相關(guān)SSM項(xiàng)目中使用攔截器和過濾器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javaWeb連接數(shù)據(jù)庫實(shí)現(xiàn)簡單登陸注冊功能的全過程

    javaWeb連接數(shù)據(jù)庫實(shí)現(xiàn)簡單登陸注冊功能的全過程

    初學(xué)javaWeb,老師留下一小作業(yè),用JAVA實(shí)現(xiàn)與服務(wù)器端交互,實(shí)現(xiàn)登錄和注冊功能,下面這篇文章主要給大家介紹了關(guān)于javaWeb連接數(shù)據(jù)庫實(shí)現(xiàn)簡單登陸注冊功能的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Spring MVC+FastJson+Swagger集成的完整實(shí)例教程

    Spring MVC+FastJson+Swagger集成的完整實(shí)例教程

    這篇文章主要給大家分享介紹了關(guān)于Spring MVC+FastJson+Swagger集成的完整實(shí)例教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • mybatis-plus無法通過logback-spring輸出的解決方法

    mybatis-plus無法通過logback-spring輸出的解決方法

    本文主要介紹了mybatis-plus無法通過logback-spring輸出,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • SpringBoot的異常處理流程是什么樣的?

    SpringBoot的異常處理流程是什么樣的?

    今天給大家?guī)淼氖荍ava的相關(guān)知識,文章圍繞著SpringBoot的異常處理流程展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • SpringBoot內(nèi)置Tomcat啟動方式

    SpringBoot內(nèi)置Tomcat啟動方式

    Spring Boot通過啟動類上的@EnableAutoConfiguration注解,自動生成并加載ServletWebServerFactoryAutoConfiguration類,該類通過@Import注解導(dǎo)入TomcatServletWebServerFactory類,該類在getWebServer()方法中創(chuàng)建并啟動TomcatServletWebServer對象
    2024-12-12
  • Java Web程序中利用Spring框架返回JSON格式的日期

    Java Web程序中利用Spring框架返回JSON格式的日期

    這里我們來介紹一下Java Web程序中利用Spring框架返回JSON格式的日期的方法,前提注意使用@DatetimeFormat時(shí)要引入一個(gè)類庫joda-time-版本.jar,否則會無法訪問相應(yīng)路徑
    2016-05-05
  • JVM Metaspace內(nèi)存溢出問題解決方案

    JVM Metaspace內(nèi)存溢出問題解決方案

    這篇文章主要介紹了JVM Metaspace內(nèi)存溢出排查總結(jié)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java中compareTo方法使用小結(jié)

    Java中compareTo方法使用小結(jié)

    compareTo是Java中Object類中的一個(gè)方法,它的作用是比較兩個(gè)對象的大小關(guān)系,本文主要介紹了Java中compareTo方法使用小結(jié),感興趣的可以了解一下
    2024-01-01
  • springboot斷點(diǎn)上傳、續(xù)傳、秒傳實(shí)現(xiàn)方式

    springboot斷點(diǎn)上傳、續(xù)傳、秒傳實(shí)現(xiàn)方式

    這篇文章主要介紹了springboot斷點(diǎn)上傳、續(xù)傳、秒傳實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java經(jīng)理與員工的差異實(shí)現(xiàn)方法

    Java經(jīng)理與員工的差異實(shí)現(xiàn)方法

    這篇文章主要介紹了Java經(jīng)理與員工的差異實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-03-03

最新評論

怀来县| 柳河县| 金湖县| 大悟县| 新龙县| 潍坊市| 余干县| 静宁县| 会理县| 巨鹿县| 安顺市| 吉林市| 灌南县| 苍山县| 阿图什市| 仲巴县| 团风县| 株洲市| 阿尔山市| 卢氏县| 贵阳市| 溆浦县| 罗山县| 霍州市| 奉贤区| 南和县| 北碚区| 赫章县| 绥芬河市| 盐源县| 武胜县| 益阳市| 昌图县| 寻乌县| 高碑店市| 凌源市| 栖霞市| 南城县| 财经| 万年县| 大渡口区|