开发者

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)以前的文章或继续浏

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜