SpringBoot定義過(guò)濾器、監(jiān)聽(tīng)器、攔截器的方法
一、自定義過(guò)濾器
創(chuàng)建一個(gè)過(guò)濾器,實(shí)現(xiàn)javax.servlet.Filter接口,并重寫(xiě)其中的init、doFilter、destory方法。
package com.example.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
/**
* 實(shí)現(xiàn)javax.servlet.Filter,覆蓋其三個(gè)方法
* @author Administrator
*
*/
@WebFilter(filterName="customFilter",urlPatterns="/*")
public class CustomFilter implements Filter{
@Override
public void destroy() {
System.out.println("CustomFilter過(guò)濾器銷毀");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("CustomFilter指定過(guò)濾器操作......");
//執(zhí)行操作后必須doFilter
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("CustomFilter初始化......");
}
}
二、自定義監(jiān)聽(tīng)器
創(chuàng)建一個(gè)過(guò)濾器,實(shí)現(xiàn)ServletContextListener接口
package com.example.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* 實(shí)現(xiàn)ServletContextListener,覆蓋其兩個(gè)方法
* @author Administrator
*
*/
@WebListener
public class CustomListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent servletContext) {
System.out.println("servletContext銷毀......");
}
@Override
public void contextInitialized(ServletContextEvent servletContext) {
System.out.println("servletContext初始化......");
}
}
創(chuàng)建一個(gè)session監(jiān)聽(tīng)器,監(jiān)聽(tīng)session的創(chuàng)建和銷毀
package com.example.listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* 實(shí)現(xiàn)HttpSessionListener接口,監(jiān)視session的動(dòng)態(tài)
* @author Administrator
*
*/
@WebListener
public class SessionListener implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent session) {
System.out.println("session創(chuàng)建成功......");
}
@Override
public void sessionDestroyed(HttpSessionEvent session) {
System.out.println("session銷毀......");
}
}
三、自定義攔截器
步驟:
1、創(chuàng)建自己的攔截器實(shí)現(xiàn)HandlerInterceptor接口
2、創(chuàng)建自己的攔截器鏈,繼承WebMvcConfigurerAdapter類,重寫(xiě)addInterceptors方法。
3、實(shí)例化自己的攔截器,并加入到攔截器鏈中。
攔截器一:
package com.example.Interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class CustomInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object,
Exception exception) throws Exception {
//在整個(gè)請(qǐng)求結(jié)束之后被調(diào)用,也就是在DispatcherServlet 渲染了對(duì)應(yīng)的視圖之后執(zhí)行(主要是用于進(jìn)行資源清理工作)
System.out.println("3. 整個(gè)請(qǐng)求結(jié)束之后被調(diào)用......CustomInterceptor1......");
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view)
throws Exception {
// 請(qǐng)求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前
System.out.println("2. 請(qǐng)求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前......CustomInterceptor1......");
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
// 在請(qǐng)求處理之前進(jìn)行調(diào)用
System.out.println("1. 在請(qǐng)求處理之前進(jìn)行調(diào)用......CustomInterceptor1......");
// 只有返回true才會(huì)繼續(xù)向下執(zhí)行,返回false取消當(dāng)前請(qǐng)求
return true;
}
}
攔截器二:
package com.example.Interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class CustomInterceptor2 implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object,
Exception exception) throws Exception {
//在整個(gè)請(qǐng)求結(jié)束之后被調(diào)用,也就是在DispatcherServlet 渲染了對(duì)應(yīng)的視圖之后執(zhí)行(主要是用于進(jìn)行資源清理工作)
System.out.println("3. 整個(gè)請(qǐng)求結(jié)束之后被調(diào)用......CustomInterceptor2......");
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view)
throws Exception {
// 請(qǐng)求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前
System.out.println("2. 請(qǐng)求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前......CustomInterceptor2......");
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
// 在請(qǐng)求處理之前進(jìn)行調(diào)用
System.out.println("1. 在請(qǐng)求處理之前進(jìn)行調(diào)用......CustomInterceptor2......");
// 只有返回true才會(huì)繼續(xù)向下執(zhí)行,返回false取消當(dāng)前請(qǐng)求
return true;
}
}
自定義攔截器鏈并加入自定義的攔截器
package com.example.adapter;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.example.Interceptor.CustomInterceptor;
import com.example.Interceptor.CustomInterceptor2;
/**
* 繼承WebMvcConfigurerAdapter,復(fù)寫(xiě)addInterceptors方法
* @author Administrator
*
*/
@Configuration
public class WebAdapter extends WebMvcConfigurerAdapter{
@Override
public void addInterceptors(InterceptorRegistry registry) {
//眾多的攔截器組成了一個(gè)攔截器鏈
/**
* 主要方法說(shuō)明:
* addPathPatterns 用于添加攔截規(guī)則
* excludePathPatterns 用戶排除攔截
*/
registry.addInterceptor(new CustomInterceptor()).addPathPatterns("/*");
registry.addInterceptor(new CustomInterceptor2()).addPathPatterns("/*");
super.addInterceptors(registry);
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于Springboot的漫畫(huà)網(wǎng)站平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)
本文將基于Springboot實(shí)現(xiàn)開(kāi)發(fā)一個(gè)漫畫(huà)主題的網(wǎng)站,實(shí)現(xiàn)一個(gè)比漂亮的動(dòng)漫連載的網(wǎng)站系統(tǒng),界面設(shè)計(jì)優(yōu)雅大方,比較適合做畢業(yè)設(shè)計(jì)和課程設(shè)計(jì)使用,需要的可以參考一下2022-08-08
JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法
本文主要介紹了JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法,要通過(guò)Java程序獲取IP地址對(duì)應(yīng)的城市,需要借助第三方的IP地址庫(kù),下面就來(lái)介紹一下,感興趣的可以了解一下2023-10-10
java實(shí)現(xiàn)大文件導(dǎo)出的實(shí)現(xiàn)與優(yōu)化
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)大文件導(dǎo)出的實(shí)現(xiàn)與優(yōu)化的相關(guān)資料,文中的示例代碼講解詳細(xì),對(duì)我們深入了解java有一定的幫助,感興趣的小伙伴可以了解下2023-11-11
基于SpringBoot和Hutool工具包實(shí)現(xiàn)驗(yàn)證碼的案例
隨著安全性的要求越來(lái)越高,目前項(xiàng)目中很多都會(huì)使用驗(yàn)證碼,只要涉及到登錄,絕大多數(shù)都會(huì)有驗(yàn)證的要求,驗(yàn)證碼的形式也是多種多樣,更復(fù)雜的圖形驗(yàn)證碼和行為驗(yàn)證碼已經(jīng)成為了更流行的趨勢(shì),本文給大家介紹了SpringBoot Hutool實(shí)現(xiàn)驗(yàn)證碼的案例,需要的朋友可以參考下2024-05-05
詳解SpringMVC驗(yàn)證框架Validation特殊用法
本篇文章主要介紹了詳解SpringMVC驗(yàn)證框架Validation特殊用法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
SpringBoot集成WebSocket實(shí)現(xiàn)前后端消息互傳的方法
這篇文章主要介紹了SpringBoot集成WebSocket實(shí)現(xiàn)前后端消息互傳的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
java中MultipartFile類型轉(zhuǎn)為File類型的4種方法
Spring提供了一個(gè)MultipartFile接口來(lái)處理文件上傳,但有時(shí)候我們需要將MultipartFile轉(zhuǎn)換為File來(lái)進(jìn)行一些特定的操作,比如保存文件到本地或者進(jìn)行文件的處理等,這篇文章主要給大家介紹了關(guān)于java中MultipartFile類型轉(zhuǎn)為File類型的4種方法,需要的朋友可以參考下2024-09-09
springboot使用Logback把日志輸出到控制臺(tái)或輸出到文件
這篇文章給大家介紹springboot項(xiàng)目使用日志工具Logback把日志不僅輸出到控制臺(tái),也可以輸出到文件的操作方法,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-10-10
Java map.getOrDefault()方法的用法詳解
這篇文章主要介紹了Java map.getOrDefault()方法的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12

