ip白名单设置

package com.dbapp.eapp.filter;import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;/*** Title: MyConfig* Description:* 自定义配置文件* Version:1.0.0** @author pancm* @date 2018年1月20日*/@Component//使用@Configuration也可以
//@ConfigurationProperties(prefix = "application")//前缀
//@PropertySource(value = "classpath:application.properties")//配置文件路径  在resource目录下
//@PropertySource(value = "file:/home/app/eapp/eapp-api-backstage/ipconfig.properties")//配置文件路径  在当前目录下
@PropertySource(value = "file:\\E:\\ipconfig.properties")//配置文件路径  在当前目录下
public class IpConfig {@Value("${ipWhiteList}")//需要使用@value注解来注入,否则是nullprivate String ipWhiteList;/*** 获取ipWhiteList** @return ipWhiteList*/public String getIpWhiteList() {return ipWhiteList;}/*** 设置ipWhiteList**/public void setIpWhiteList(String ipWhiteList) {this.ipWhiteList = ipWhiteList;}}  
package com.dbapp.eapp.filter;import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Configuration
public class WhiteIPInterceptor extends WebMvcConfigurerAdapter {private static final Logger logger = LoggerFactory.getLogger(WhiteIPInterceptor.class);@Beanpublic HandlerInterceptor getMyInterceptor() {return new MyInterceptor();}@Overridepublic void addInterceptors(InterceptorRegistry registry) {// addPathPatterns 用于添加拦截规则, 这里假设拦截 /url 后面的全部链接// excludePathPatterns 用户排除拦截registry.addInterceptor(getMyInterceptor()).addPathPatterns("/**");super.addInterceptors(registry);}class MyInterceptor implements HandlerInterceptor {@Autowiredprivate IpConfig ipconfig;/*** 在请求处理之前进行调用(Controller方法调用之前)调用,* 返回true 则放行, false 则将直接跳出方法*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {String ip = getIpAddr(request);// 获取可以访问系统的白名单String ipStr = readToString("E:\\ipconfig.properties");
//          String ipStr = ipconfig.getIpWhiteList();String[] ipArr = ipStr.split("\\|");List<String> ipList = Arrays.asList(ipArr);if (ipList.contains(ip)) {return true;} else {logger.info("该IP: " + ip + "不通过,不在白名单内!");response.setCharacterEncoding("UTF-8");response.setContentType("application/json; charset=utf-8");// 消息Map<String, Object> messageMap = new HashMap<>();messageMap.put("status", "404");messageMap.put("message", "您好,ip为" + ip + ",暂时没有访问权限,请联系管理员开通访问权限。");ObjectMapper objectMapper = new ObjectMapper();String writeValueAsString = objectMapper.writeValueAsString(messageMap);response.getWriter().write(writeValueAsString);return false;}}/*** 获取访问的ip地址** @param request* @return*/public 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.getHeader("HTTP_CLIENT_IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_X_FORWARDED_FOR");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}return ip;}public  String readToString(String fileName) {String encoding = "UTF-8";File file = new File(fileName);Long filelength = file.length();byte[] filecontent = new byte[filelength.intValue()];try {FileInputStream in = new FileInputStream(file);in.read(filecontent);in.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}try {return new String(filecontent, encoding);} catch (UnsupportedEncodingException e) {System.err.println("The OS does not support " + encoding);e.printStackTrace();return null;}}//请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
//          System.out.println("postHandle被调用");}//在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
//          System.out.println("afterCompletion被调用");}}}

ip白名单实现java相关推荐

  1. Java实现 对ip白名单的限制

    有些项目的接口是需要权限访问,比如限制IP.做权限控制,等等方案,本文是限制ip权限设置访问策略. 先看测试效果: 测试: 注意访问需要输入:http://127.0.0.1:8981/ 在配置文件加 ...

  2. 【Java】Socket网络编程实现内网穿透、端口映射转发、内网穿透上网工具的编写,设置IP白名单防火墙

    这里写目录标题 简介 更新 一.背景 1.1 情景假设 1.2 想要达到的目的 1.3 局限 1.3 解决方案一(路由器NAT) 1.4 解决方案二(云服务器转发) 二.方案介绍 2.1 方案简介 2 ...

  3. java ip 白名单_Java代码中对IP进行白名单验证

    public classipUtil {//IP的正则,这个正则不能验证第一组数字为0的情况//private static Pattern pattern = Pattern//.compile(& ...

  4. 算法题:实现一个IP白名单过滤器

    最近看到一则招聘的JD,附了一个算法题的链接,原题如下: 请实现一个IP白名单过滤算法,实现以下接口boolean addWhiteIpAddress(String ip);boolean isWhi ...

  5. IP暴露接口IP白名单设置

    暴露接口IP白名单设置 暴露接口IP白名单设置 CrazyL- 2018-01-03 14:36:15  4797  收藏 1 展开 String realIp = IPUtil.getIpAddr( ...

  6. 安全性设计之-ip白名单设计

    安全性设计之-ip白名单设计 最近一直在做系统的接口开发,接口对于安全性有一定的要求,采用了一定的安全措施,各种加解密,证书手段也采用了.做了这些常见的安全措施之后,考虑到限制非法ip的访问,决定采用 ...

  7. nginx配置IP白名单

    分析nginx访问日志,有哪些IP访问过nginx. 命令参考:awk '{print $1}' logs/access.log | sort | uniq -c | sort -nr -k1 输出的 ...

  8. HttpServletRequest、ServerHttpRequest获取访问者真实IP,并设置ip白名单

    在项目记录日志的时候和网关处理IP白名单的时候,通常会获取用户IP,一般都会从HttpServletRequest.ServerHttpRequest获取访问者真实IP 1.从HttpServletR ...

  9. IP白名单添加了当前IP,获取access_token时依然报出错误码40164的坑

    开发公众号网页时,想要调用微信API接口,令人无奈的是,想要调用各接口都需使用access_token,于是,获取access_token的征途开始了-- 1.开发者基本配置 (1) 公众平台官网登录 ...

最新文章

  1. 洛谷-不高兴的津津(升级版)-数组
  2. SSR rendering exceeded timeout 3000, fallbacking to CSR for
  3. 在 react 里写 vue3 ? 还写了自定义 hooks和 Hoc 构建了响应式 !
  4. c语言extern_C语言中#if,#if defined ,#ifdef,extern的用法描述
  5. tomcat 日志catalina.out 按天自动分割 设定时任务定时清除
  6. 我的世界java版怎么打开聊天栏_我的世界JAVA版才有的隐藏模式只有开发者才知道怎么进入...
  7. 王家林 Scala 深入浅出实战经典视频教程
  8. vce 题库导入_Visual CertExam(VCE)试题制作教程.pdf
  9. CREO图文教程:三维设计案例之水龙头的螺旋弹簧设计图文教程之详细攻略
  10. 13.3.4 蓝牙程序案例: 蓝牙串口调试助手
  11. C# 实现自动ADSL拨号
  12. 跟同事关系再好,这3种话宁烂肚里也别张嘴,莫让福运悄悄离开你
  13. 诛仙2怎样修改服务器时间,《诛仙2》3月2日服务器数据互通公告
  14. 算法-入门篇(欧式距离)
  15. Github每日精选(第24期):python的浏览器MechanicalSoup
  16. 耐人思考的“30秒法则”
  17. 安卓13:Android Studio Button组件默认样式为蓝紫色,无法更改
  18. 左程云:程序员该如何学习算法?
  19. 出现 ERROR StatusLogger Log4j2 could not find a logging implementation.
  20. Python基础题目解析

热门文章

  1. 长城云计算机如何重装系统,重装系统怎么装,这个方法一学就会
  2. axios 超级小白使用模板
  3. type struct 和struct的区别
  4. window 10 中文家庭版安装,配置,测试ISS服务器
  5. 【基因】原核生物基因调控机制,操纵子学说整理——2015年7月17日
  6. 简练软考知识点整理-创建工作分解结构过程
  7. 数学统计:均值、标准差、方差、协方差
  8. 远控软件gh0st源码免杀之我谈
  9. python 基础知识(1)
  10. Java实现 蓝桥杯VIP 算法提高 洗牌