spring boot对IP地址设置黑白名单的项目实践
1、在yml配置文件中
ip: whitelist: IP1 #白名单 blacklist: IP2 #黑名单
2、定义过滤器类
@Component
public class Ip编程客栈Filter 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 =www.devze.com (HttpServletRequest) request;
String ip = httpRequest.getRemoteAddr();
if (whitelist.contains(ip)) {
// 白名单IP,直接通过
chain.doFilter(request, response);
} else if (blacklist.contains(ip)) {
// 黑名单IP,拒绝访问
HttpServletResponse httpResponse = (HttpShttp://www.devze.comervletResponse) response;
httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "IP is in blacklist");
} else {
// 非黑OMKWmK白名单IP,根据业务需求处理(例如:允许或拒绝)
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
// 清理资源,如果有的话
}
}
3、注册config类FilterConfig
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<IpFilter> ipFilterRegistration() {
FilterRegistrationBean<IpFilter> registrationBean = new FilterRegistrationBean<&g编程t;();
registrationBean.setFilter(new IpFilter());
registrationBean.addUrlPatterns("/*"); // 设置过滤器拦截的路径
registrationBean.setName("ipFilter");
registrationBean.setOrder(1); // 设置过滤器的顺序
return registrationBean;
}
}
到此这篇关于spring boot对IP地址设置黑白名单的项目实践的文章就介绍到这了,更多相关springboot IP黑白名单内容请搜索编程客栈(www.devze.com)以前的文章或继续浏
加载中,请稍侯......
精彩评论