springboot如何配置Filter過(guò)濾器
springboot配置Filter過(guò)濾器
Filter 過(guò)濾器是web開(kāi)發(fā)中很重要的一個(gè)組件,下面以一個(gè)session登陸的例子介紹下spring boot中如何使用Filter
首先要準(zhǔn)備一個(gè)實(shí)現(xiàn)了Filter的接口的類(lèi)
SessionFilter:
import org.slf4j.LoggerFactory;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by mazhenhua on 2016/12/27.
*
* 過(guò)濾器
*/
public class SessionFilter implements Filter {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SessionFilter.class);
/**
* 封裝,不需要過(guò)濾的list列表
*/
protected static List<Pattern> patterns = new ArrayList<Pattern>();
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
logger.info("aaaaaaaaaa");
String url = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length());
if (url.startsWith("/") && url.length() > 1) {
url = url.substring(1);
}
if (isInclude(url)){
chain.doFilter(httpRequest, httpResponse);
return;
} else {
HttpSession session = httpRequest.getSession();
if (session.getAttribute("") != null){
// session存在
chain.doFilter(httpRequest, httpResponse);
return;
} else {
// session不存在 準(zhǔn)備跳轉(zhuǎn)失敗
/* RequestDispatcher dispatcher = request.getRequestDispatcher(path);
dispatcher.forward(request, response);*/
chain.doFilter(httpRequest, httpResponse);
return;
}
}
}
@Override
public void destroy() {
}
/**
* 是否需要過(guò)濾
* @param url
* @return
*/
private boolean isInclude(String url) {
for (Pattern pattern : patterns) {
Matcher matcher = pattern.matcher(url);
if (matcher.matches()) {
return true;
}
}
return false;
}
}實(shí)際開(kāi)發(fā)中往往有很多請(qǐng)求要直接請(qǐng)求進(jìn)來(lái)
不需要鑒權(quán)登陸的,所以代碼中過(guò)濾掉這種請(qǐng)求的代碼,裝進(jìn)list就好了。
/**
* 配置過(guò)濾器
* @return
*/
@Bean
public FilterRegistrationBean someFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(sessionFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue");
registration.setName("sessionFilter");
return registration;
}
/**
* 創(chuàng)建一個(gè)bean
* @return
*/
@Bean(name = "sessionFilter")
public Filter sessionFilter() {
return new SessionFilter();
}經(jīng)過(guò)上面這倆步的配置,過(guò)濾器基本上就可以了。
配置多個(gè)filter,并指定順序,請(qǐng)參考: spring boot filter 配置多個(gè)時(shí),執(zhí)行順序
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot?實(shí)現(xiàn)流控的操作方法
本文介紹了限流算法的基本概念和常見(jiàn)的限流算法,包括計(jì)數(shù)器算法、漏桶算法和令牌桶算法,還介紹了如何在Spring?Boot中使用Guava庫(kù)和自定義注解以及AOP實(shí)現(xiàn)接口限流功能,感興趣的朋友一起看看吧2024-12-12
詳解Struts2動(dòng)態(tài)方法調(diào)用
這篇文章主要介紹了詳解Struts2動(dòng)態(tài)方法調(diào)用,涉及調(diào)用方法的代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-09-09
SpringBoot整合Spring Security實(shí)現(xiàn)基礎(chǔ)認(rèn)證與授權(quán)
在后端開(kāi)發(fā)領(lǐng)域,認(rèn)證(Authentication)?和授權(quán)(Authorization)?是系統(tǒng)安全的核心基石,Spring Security 作為 Spring 生態(tài)官方推薦的安全框架,是Java 后端安全開(kāi)發(fā)的首選方案,本文給大家介紹了SpringBoot整合Spring Security實(shí)現(xiàn)基礎(chǔ)認(rèn)證與授權(quán)2026-04-04
Java實(shí)現(xiàn)給PDF文件增加背景圖的操作指南
本文介紹了如何在Java中生成PDF文件并為其添加背景圖,通過(guò)兩種不同的方式實(shí)現(xiàn):一種使用了iText庫(kù),另一種使用了PdfBox庫(kù),這兩種方法都可以實(shí)現(xiàn)將背景圖片添加到PDF文件中,并且可以根據(jù)項(xiàng)目需求選擇合適的方法,需要的朋友可以參考下2025-11-11
如何為?Spring?Boot?項(xiàng)目配置?Logback?日志
由于?Spring?Boot?的默認(rèn)日志框架選用的?Logback,再加上?Log4j2?之前爆過(guò)嚴(yán)重的漏洞,所以我們這次就只關(guān)注?Logback,本文重點(diǎn)給大家介紹如何為?Spring?Boot?項(xiàng)目配置?Logback?日志,感興趣的朋友跟隨小編一起看看吧2024-07-07
解決因缺少Log4j依賴(lài)導(dǎo)致應(yīng)用啟動(dòng)失敗的問(wèn)題
日志是應(yīng)用軟件中不可缺少的部分,Apache的開(kāi)源項(xiàng)目log4j是一個(gè)功能強(qiáng)大的日志組件,提供方便的日志記錄。但這篇文章不是介紹Log4j,這篇文章主要介紹了關(guān)于因缺少Log4j依賴(lài)導(dǎo)致應(yīng)用啟動(dòng)失敗問(wèn)題的相關(guān)資料,需要的朋友可以參考下。2017-04-04
SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine)
這篇文章主要介紹了SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

