当前位置: 首页 > news >正文

springboot访问地址时404_SpringBoot配置一个过滤器获取远程地址、访问路径等信息

第一步、编写一个过滤器。

package com.xiaop.zhanchi.filters;import org.apache.commons.lang.StringUtils;import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import java.io.IOException;public class AddressFilter implements Filter{    public static final String COMMA = ",";    @Override    public void init(FilterConfig filterConfig) throws ServletException {        System.out.println("AddressFilter is init....");    }    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {        HttpServletRequest httpRequest = (HttpServletRequest) request;        String remoteAddr = getIpAddr(httpRequest);        String operation = httpRequest.getRequestURI();        System.out.println("remoteAddr:"+remoteAddr);        System.out.println("operation:"+operation);        filterChain.doFilter(request, response);    }    @Override    public void destroy() {        System.out.println("AddressFilter was destroyed....");    }    /**     * 获取IP地址     *     * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址     * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址     *     * @param request     *            {@link HttpServletRequest}     * @return ipaddr     */    public static String getIpAddr(HttpServletRequest request) {        String ip = null;        String unkownStr = "unknown";        if (request == null) {            return "";        }        System.out.println("remote addr:"+request.getRemoteAddr());        try {            ip = request.getHeader("x-forwarded-for");            if (StringUtils.isEmpty(ip) || unkownStr.equalsIgnoreCase(ip)) {                ip = request.getHeader("Proxy-Client-IP");            }            if (StringUtils.isEmpty(ip) || ip.length() == 0 || unkownStr.equalsIgnoreCase(ip)) {                ip = request.getHeader("WL-Proxy-Client-IP");            }            if (StringUtils.isEmpty(ip) || unkownStr.equalsIgnoreCase(ip)) {                ip = request.getHeader("HTTP_CLIENT_IP");            }            if (StringUtils.isEmpty(ip) || unkownStr.equalsIgnoreCase(ip)) {                ip = request.getHeader("HTTP_X_FORWARDED_FOR");            }            if (StringUtils.isEmpty(ip) || unkownStr.equalsIgnoreCase(ip)) {                ip = request.getRemoteAddr();            }        } catch (Exception e) {            e.printStackTrace();        }        // //使用代理,则获取第一个IP地址        int ipLength = 15;        if (!StringUtils.isEmpty(ip) && ip.length() > ipLength) {            if (ip.indexOf(COMMA) > 0) {                ip = ip.substring(0, ip.indexOf(COMMA));            }        }        return ip;    }}

第二步,加载刚刚写好的过滤器

package com.xiaop.zhanchi.config;import com.xiaop.zhanchi.filters.AddressFilter;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.servlet.Filter;@Configurationpublic class BeanConfig {    @Bean    public Filter addressFilterBean() {        AddressFilter filter = new AddressFilter();        return filter;    }}

最后,我们启动工程,访问了一个测试地址,可以看到过滤器已经生效了

7e8298e5-af18-eb11-8da9-e4434bdf6706.png

请关注、收藏,小编会定期更新内容

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Keytool命令来生成CA数字证书
  • 游戏模型提取工具ninjaripper_图文翻译 | 赛车游戏道路的程序生成
  • 系统出错信息设计
  • 团队软件库_谷歌的软件工程文化:激发创造力、鼓励自主性
  • ActiveBPEL引擎流程部署描述符(pdd)文件概述
  • 200 switching to ascii mode_上海某超市保安遭辞退怒砸200瓶红酒;香槟产区采收时间打破历史记录 | 酒界新闻...
  • ODM和OLAP实现时序预测(一)
  • 16进制 转为图片 php_ImageMagick(图片处理软件) 分享
  • 数据分析 超市条码_超市小程序做得比较好的功能点是什么?
  • ODM和OLAP实现时序预测(二)
  • 软件产品研发方向调研内容_研发部职能分解:调研,产品、技术、工艺、软件研发,测试、验收...
  • 网页像素测量工具_寓教于乐!11 个提升网页设计和前端开发技能的趣味游戏
  • ODM和OLAP实现时序预测(三)
  • asp 执行 exe_asp.net core 系列 18 web服务器实现
  • 搜索引擎登录,网站分类目录登录地址
  • 【EOS】Cleos基础
  • 【翻译】babel对TC39装饰器草案的实现
  • Create React App 使用
  • css布局,左右固定中间自适应实现
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • egg(89)--egg之redis的发布和订阅
  • Git 使用集
  • Javascript弹出层-初探
  • Java到底能干嘛?
  • Laravel Mix运行时关于es2015报错解决方案
  • MySQL几个简单SQL的优化
  • 关于extract.autodesk.io的一些说明
  • 关于List、List?、ListObject的区别
  • 前端js -- this指向总结。
  • 前端自动化解决方案
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 手写一个CommonJS打包工具(一)
  • 问题之ssh中Host key verification failed的解决
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 《天龙八部3D》Unity技术方案揭秘
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • #include
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (1)Hilt的基本概念和使用
  • (20)docke容器
  • (day18) leetcode 204.计数质数
  • (ZT)出版业改革:该死的死,该生的生
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (待修改)PyG安装步骤
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (蓝桥杯每日一题)love
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (七)Java对象在Hibernate持久化层的状态
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十一)c52学习之旅-动态数码管
  • (实战篇)如何缓存数据
  • (推荐)叮当——中文语音对话机器人
  • (原創) 物件導向與老子思想 (OO)
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)菜鸟学数据库(三)——存储过程