spring boot對(duì)IP地址設(shè)置黑白名單的項(xiàng)目實(shí)踐
1、在yml配置文件中
ip: whitelist: IP1 #白名單 blacklist: IP2 #黑名單
2、定義過(guò)濾器類(lèi)
@Component
public class IpFilter implements Filter {
//白名單IP列表
private List<String> whitelist;
//黑名單IP列表
private List<String> blacklist;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//獲取上下文信息
ServletContext context = filterConfig.getServletContext();
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
Environment environment = ctx.getBean(Environment.class);
//賦予初值
whitelist = Arrays.stream(environment.getProperty("ip.whitelist").split(","))
.map(String::trim)
.collect(Collectors.toList());
blacklist=Arrays.stream(environment.getProperty("ip.blacklist").split(","))
.map(String::trim)
.collect(Collectors.toList());
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String ip = httpRequest.getRemoteAddr();
if (whitelist.contains(ip)) {
// 白名單IP,直接通過(guò)
chain.doFilter(request, response);
} else if (blacklist.contains(ip)) {
// 黑名單IP,拒絕訪問(wèn)
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "IP is in blacklist");
} else {
// 非黑白名單IP,根據(jù)業(yè)務(wù)需求處理(例如:允許或拒絕)
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
// 清理資源,如果有的話
}
}
3、注冊(cè)config類(lèi)FilterConfig
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<IpFilter> ipFilterRegistration() {
FilterRegistrationBean<IpFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new IpFilter());
registrationBean.addUrlPatterns("/*"); // 設(shè)置過(guò)濾器攔截的路徑
registrationBean.setName("ipFilter");
registrationBean.setOrder(1); // 設(shè)置過(guò)濾器的順序
return registrationBean;
}
}
到此這篇關(guān)于spring boot對(duì)IP地址設(shè)置黑白名單的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)springboot IP黑白名單內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏
相關(guān)文章
Java?中的?getDeclaredFields()使用與原理解析
在Java反射機(jī)制中,getDeclaredFields()用于獲取類(lèi)的所有字段,包括私有字段,通過(guò)反射,可以在運(yùn)行時(shí)動(dòng)態(tài)地獲取類(lèi)的信息并操作其成員,本文詳細(xì)介紹了getDeclaredFields()的使用方法、工作原理以及最佳實(shí)踐,涵蓋了反射的基本概念、使用場(chǎng)景和注意事項(xiàng),感興趣的朋友一起看看吧2025-01-01
Java讀取文件及基于正則表達(dá)式的獲取電話號(hào)碼功能詳解
這篇文章主要介紹了Java讀取文件及基于正則表達(dá)式的獲取電話號(hào)碼功能,結(jié)合實(shí)例形式詳細(xì)分析了正則匹配操作的相關(guān)語(yǔ)法及電話號(hào)碼匹配的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-09-09
Spring實(shí)戰(zhàn)之依賴(lài)關(guān)系注入之后的行為示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之依賴(lài)關(guān)系注入之后的行為,結(jié)合實(shí)例形式分析了Spring依賴(lài)關(guān)系注入之后的行為實(shí)現(xiàn)與使用相關(guān)操作技巧,需要的朋友可以參考下2019-11-11
Java值得使用Lambda的8個(gè)場(chǎng)景合集
可能對(duì)不少人來(lái)說(shuō),Lambda顯得陌生又復(fù)雜,覺(jué)得Lambda會(huì)導(dǎo)致代碼可讀性下降,但畢竟2023年了,JDK都出了那么多新版本,是時(shí)候試試Lambda了2023-08-08
elasticsearch索引的創(chuàng)建過(guò)程index?create邏輯分析
這篇文章主要介紹了elasticsearch索引核心index?create,索引的創(chuàng)建過(guò)程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04

