package com.khy.config;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.alibaba.fastjson.JSONObject;
/**
* ip白名单拦截器
* @author khy
* @createTime 2020年6月15日下午2:27:37
*/
public class IpAddressInInterceptor extends HandlerInterceptorAdapter {
// 模拟添加的白名单内容 可以配置到对于的数据库或者缓存文件中
private final static List<String>WHITELIST = new ArrayList<String>(){{
add("127.0.0.1");
}};
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
StringBuffer requestURL = httpServletRequest.getRequestURL();
boolean res= handleMessage(httpServletRequest);
if (res == false) {
httpServletResponse.setCharacterEncoding("UTF-8");
httpServletResponse.setContentType("application/json;charset=utf-8");
String msg = " 未授权的客户端IP: " + getRealIp(httpServletRequest);
JSONObject json = new JSONObject();
json.put("code", "10000");
json.put("msg", msg);
httpServletResponse.getWriter().write(json.toString());
}
return res;
}
/**
* 验证IP是否授权
*
*/
private boolean handleMessage(HttpServletRequest request){
// HttpServletRequest request = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);
// 通过一个IpAddressConfig对象,从XML文件中读取预先设置的允许和拒绝的IP地址,这些值也可以来自数据库
String ipAddr = getRealIp(request); // 取客户端IP地址
boolean valid = false;
if(WHITELIST.contains(ipAddr)){ //如果配置的集合中含有当前ip白名单则执行
valid = true;
}
if (valid) {
return true;
} else {
return false;
}
}
/**
* 从Request对象中获得客户端IP,处理了HTTP代理服务器和Nginx的反向代理截取了ip
* @author khy
* @createTime 2020年6月15日下午2:29:51
* @param request
* @return
*/
private String getRealIp(HttpServletRequest request) {
//String ip = request.getHeader("cdn-src-ip");
String ip = request.getHeader("X-Real-IP");
if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) {
return ip;
}
return request.getRemoteAddr();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
springboot通过@Profile注解配置不同环境
共11个文件
java:4个
prefs:3个
classpath:1个
需积分: 34 4 下载量 75 浏览量
2020-06-15
15:24:31
上传
评论
收藏 6KB RAR 举报
温馨提示
通过当前案例和之前的maven 打包加载不同环境的配置文件内容;配合spring的@Profile注解配置在对于的class或者@Bean注解的方法上;来通过觉得某个拦截或者Java代码类是否生效
资源推荐
资源详情
资源评论
收起资源包目录
boot-profiles.rar (11个子文件)
boot-profiles
pom.xml 2KB
.settings
org.eclipse.m2e.core.prefs 90B
org.eclipse.core.resources.prefs 191B
org.eclipse.jdt.core.prefs 243B
src
test
resources
java
main
resources
application.properties 58B
java
com
khy
config
WebMvcConfig.java 1KB
IpAddressInInterceptor.java 3KB
controller
ProfilesController.java 333B
ApplicationMain.java 314B
.project 773B
.classpath 1KB
共 11 条
- 1
资源评论
manyu7741
- 粉丝: 4
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Python的在线学习与推荐系统设计与实现(论文+源码)-kaic
- 蓝桥杯2024年第十五届省赛真题-前缀总分
- com.qihoo.appstore_300101305-1.apk
- tensorflow-gpu-2.7.1-cp37-cp37m-manylinux2010-x86-64.whl
- tensorflow-2.7.2-cp37-cp37m-manylinux2010-x86-64.whl
- tensorflow-2.7.1-cp39-cp39-manylinux2010-x86-64.whl
- 蓝桥杯2024年第十五届省赛真题-传送阵
- com.qihoo.appstore_300101305.apk
- linux之线程同步一.doc
- keil5配色方案10种
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功