Springboot接口添加IP白名单限制

实现流程:自定义拦截器——注入拦截器——获取请求IP——对比IP是否一致——请求返回

文章背景:接口添加IP白名单限制,只有规定的IP可以访问项目。

实现思路:添加拦截器,拦截项目所有的请求,获取请求的网络IP,查询IP是否在白名单之中,白名单设置在数据库中,用一张表存储,若在表中有此IP则进行下一步,不在则进行请求拦截,返回到客户端。

实现方式:HandlerInterceptor+MySQL+Mybatis-plus

自定义拦截器,创建类并且实现HandlerInterceptor接口,即可成为拦截器。

HandlerInterceptor接口提供了三个方法,三个方法分别如下
preHandle方法 在业务处理器处理请求之前进行调用,可以用做权限校验,token验证等等。结果返回true继续执行,结果返回false拦截请求。
postHandle方法 在业务处理器处理请求执行完成后,生成视图之前执行。
afterCompletion方法 在业务处理器执行完成之后,可以用做清理资源,日志记录等等。

自定义拦截器:实现HandlerInterceptor接口,重写preHandle方法,在preHandle添加获取IP的方法和IP检验业务。代码中涉及到的testEngineerService.getIp()方法在下边!!!

import com.alibaba.fastjson.JSON;
import com.lifel.service.TestEngineer.TestEngineerService;
import com.lifel.utils.ToolsResultEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import ja
  • 20
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
Spring Boot中实现IP白名单可以通过过滤器(Filter)来实现。下面是具体的实现步骤: 1. 创建一个IP白名单过滤器类,代码如下: ``` @Component public class IPFilter implements Filter { @Value("${ip.whiteList}") private String ipWhiteList; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; String remoteAddr = getIpAddr(httpRequest); if (isIpAllowed(remoteAddr)) { chain.doFilter(request, response); } else { HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.setStatus(HttpStatus.FORBIDDEN.value()); } } private String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; } private boolean isIpAllowed(String remoteAddr) { String[] whiteList = ipWhiteList.split(","); for (String ip : whiteList) { if (ip.equals(remoteAddr)) { return true; } } return false; } } ``` 2. 在application.properties中配置IP白名单,如下: ``` ip.whiteList=127.0.0.1,192.168.0.* ``` 其中,可以使用通配符 * 来表示一个范围内的IP地址。 3. 在Spring Boot中注册IP过滤器,代码如下: ``` @Configuration public class WebConfig implements WebMvcConfigurer { @Autowired private IPFilter ipFilter; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(ipFilter).addPathPatterns("/**"); } } ``` 4. 最后,启动应用程序,IP白名单过滤器就会生效了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值