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

Spring上下文工具类

文章目录

  • 获取ip地址
  • 请求上下文相关
  • Spring上下文获取Bean对象

获取ip地址

public class IpUtils {

    private IpUtils() {
    }

    /**
     * 获取请求ip地址
     *
     * @return {@link String}
     */
    public static String getIpAddress() {
        HttpServletRequest request = RequestContextHolderUtils.getRequest();
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }

        if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("X-Forwarded-For");
        }

        if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }

        if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("X-Real-IP");
        }

        if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }

        if ("0:0:0:0:0:0:0:1".equals(ip)) {
            ip = "127.0.0.1";
        }

        if (ip.contains(",")) {
            ip = ip.split(",")[0];
        }
        return ip;
    }
}

请求上下文相关

  • 获取HttpServletRequest、HttpServletResponse、HttpSession、ServletContext等对象
public class RequestContextHolderUtils {
    
    /**
     * 获取HttpServletRequest请求对象
     *
     * @return {@link HttpServletRequest}
     */
    public static HttpServletRequest getRequest() {
        return getRequestAttributes().getRequest();
    }

    /**
     * 获取HttpServletResponse响应对象
     *
     * @return {@link HttpServletResponse}
     */
    public static HttpServletResponse getResponse() {
        return getRequestAttributes().getResponse();
    }

    /**
     * 获得会话
     *
     * @return {@link HttpSession}
     */
    public static HttpSession getSession() {
        return getRequest().getSession();
    }
     /**
     * 设置会话属性
     *
     * @param name  名字
     * @param value 值
     */
    public static void setSessionAttribute(String name, Object value) {
        getSession().setAttribute(name, value);
    }

    /**
     * 获得会话属性
     *
     * @param name 名字
     * @return {@link Object}
     */
    public static Object getSessionAttribute(String name) {
        return getSession().getAttribute(name);
    }

    /**
     * servlet容器请求属性
     *
     * @return {@link ServletRequestAttributes}
     */
    public static ServletRequestAttributes getRequestAttributes() {
        return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
    }

    /**
     * 得到servlet上下文
     *
     * @return {@link ServletContext}
     */
    public static ServletContext getServletContext() {
        return Objects.requireNonNull(ContextLoader.getCurrentWebApplicationContext()).getServletContext();
    }
}

Spring上下文获取Bean对象

@Component
public class SpringContextUtils implements ApplicationContextAware {

    /**
     * 上下文对象实例
     * -- GETTER --
     *  获取applicationContext
     */
    @Getter
    private static ApplicationContext applicationContext;

    @Override
    @Autowired
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContextUtils.applicationContext = applicationContext;
    }

    /**
     * 通过name获取 Bean.
     */
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }

    /**
     * 通过class获取Bean.
     */
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

    /**
     * 通过name,以及Clazz返回指定的Bean
     */
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }
}
http://www.dtcms.com/a/60468.html

相关文章:

  • 语文-文章题材
  • 02_LangChain整合DeepSeek提示词工程应用实践
  • 深入理解pytest框架中的conftest.py:使用与作用原理
  • 探索AI对冲基金:开源自动化交易系统的革新之路
  • 配置Hadoop集群
  • Markdown编辑器使用指南(适用于Typora)
  • 牛客周赛 Round 84——小红的陡峭值(四)
  • FPGA入门教程
  • Gini系数的应用 - 指标波动贡献分析
  • 【Matlab仿真】如何解决三相交流信号源输出波形失真问题?
  • 多模态推理模型相关开源工作
  • 【TMS570LC4357】之工程创建
  • 【Leetcode 每日一题】2269. 找到一个数字的 K 美丽值
  • 通义万相2.1技术深度解析
  • ble中的UUID
  • HCIP第二讲作业
  • Linux——工具(4)gdb调试器
  • LaTex安装流程(附安装包)LaTex超详细保姆级图文安装教程
  • 华为eNSP:配置P2P网络类型
  • Python设计模式 - 建造者模式
  • 在 UniApp 中实现stream流式输出 AI 聊天功能,AI输出内容用Markdown格式展示
  • 2025华为OD机试真题(Java+Py+C+JS)专栏导航帖(持续收录中)
  • 【贪心算法】将数组和减半的最小操作数
  • 利用paddleocr解决图片旋转问题
  • CI/CD—Jenkins cron定时任务表达式
  • 硬件基础(4):(5)设置ADC电压采集中MCU的参考电压
  • numpy广播性质
  • 激光雷达目标探测顶刊简介2025.3.11
  • 【医院内部控制专题】7.医院内部控制环境要素剖析(三):人力资源政策
  • 海康线扫相机平场矫正教程