java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot IP黑白名单

spring boot对IP地址设置黑白名单的项目实践

作者:程序员阿明

本文主要介绍了spring boot对IP地址设置黑白名单的项目实践,通过YML配置文件定义过滤器类并注册FilterConfig来实现访问控制,具有一定的参考价值,感兴趣的可以了解一下

1、在yml配置文件中

ip:
  whitelist: IP1  #白名单
  blacklist: IP2 #黑名单

2、定义过滤器类

@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,直接通过
            chain.doFilter(request, response);
        } else if (blacklist.contains(ip)) {
            // 黑名单IP,拒绝访问
            HttpServletResponse httpResponse = (HttpServletResponse) response;
            httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "IP is in blacklist");
        } else {
            // 非黑白名单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<>();
        registrationBean.setFilter(new IpFilter());
        registrationBean.addUrlPatterns("/*"); // 设置过滤器拦截的路径
        registrationBean.setName("ipFilter");
        registrationBean.setOrder(1); // 设置过滤器的顺序
        return registrationBean;
    }

}

 到此这篇关于spring boot对IP地址设置黑白名单的项目实践的文章就介绍到这了,更多相关springboot IP黑白名单内容请搜索脚本之家以前的文章或继续浏

您可能感兴趣的文章:
阅读全文