使用SpringBoot如何實(shí)現(xiàn)定義過濾器與攔截器?針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

為祿豐等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及祿豐網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、祿豐網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
一、自定義過濾器
創(chuàng)建一個(gè)過濾器,實(shí)現(xiàn)javax.servlet.Filter接口,并重寫其中的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過濾器銷毀");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("CustomFilter指定過濾器操作......");
//執(zhí)行操作后必須doFilter
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("CustomFilter初始化......");
}
}
二、自定義監(jiān)聽器
創(chuàng)建一個(gè)過濾器,實(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)聽器,監(jiān)聽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類,重寫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è)請求結(jié)束之后被調(diào)用,也就是在DispatcherServlet 渲染了對應(yīng)的視圖之后執(zhí)行(主要是用于進(jìn)行資源清理工作)
System.out.println("3. 整個(gè)請求結(jié)束之后被調(diào)用......CustomInterceptor1......");
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view)
throws Exception {
// 請求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前
System.out.println("2. 請求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前......CustomInterceptor1......");
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
// 在請求處理之前進(jìn)行調(diào)用
System.out.println("1. 在請求處理之前進(jìn)行調(diào)用......CustomInterceptor1......");
// 只有返回true才會(huì)繼續(xù)向下執(zhí)行,返回false取消當(dā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è)請求結(jié)束之后被調(diào)用,也就是在DispatcherServlet 渲染了對應(yīng)的視圖之后執(zhí)行(主要是用于進(jìn)行資源清理工作)
System.out.println("3. 整個(gè)請求結(jié)束之后被調(diào)用......CustomInterceptor2......");
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view)
throws Exception {
// 請求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前
System.out.println("2. 請求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前......CustomInterceptor2......");
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
// 在請求處理之前進(jìn)行調(diào)用
System.out.println("1. 在請求處理之前進(jìn)行調(diào)用......CustomInterceptor2......");
// 只有返回true才會(huì)繼續(xù)向下執(zhí)行,返回false取消當(dā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ù)寫addInterceptors方法
* @author Administrator
*
*/
@Configuration
public class WebAdapter extends WebMvcConfigurerAdapter{
@Override
public void addInterceptors(InterceptorRegistry registry) {
//眾多的攔截器組成了一個(gè)攔截器鏈
/**
* 主要方法說明:
* addPathPatterns 用于添加攔截規(guī)則
* excludePathPatterns 用戶排除攔截
*/
registry.addInterceptor(new CustomInterceptor()).addPathPatterns("/*");
registry.addInterceptor(new CustomInterceptor2()).addPathPatterns("/*");
super.addInterceptors(registry);
}
}
關(guān)于使用SpringBoot如何實(shí)現(xiàn)定義過濾器與攔截器問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
分享名稱:使用SpringBoot如何實(shí)現(xiàn)自定義過濾器與攔截器
轉(zhuǎn)載注明:http://chinadenli.net/article14/gdggde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、標(biāo)簽優(yōu)化、品牌網(wǎng)站建設(shè)、虛擬主機(jī)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)