SpringContextUtils
import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Map; /** * * Spring 工具类 */ @Component public class SpringContextUtils implements ApplicationContextAware { private static ConfigurableApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext context) throws BeansException { applicationContext = (ConfigurableApplicationContext) context; } /** * 获取ApplicationContext对象 */ public static ApplicationContext getApplicationContext(){ return applicationContext; } /** * 停止应用程序 */ public static void close(){ if(applicationContext != null){ applicationContext.close(); } } /** * 根据bean的名称获取bean */ public static Object getBeanByName(String name){ return applicationContext.getBean(name); } /** * 根据bean的class来查找对象 */ public static <T> T getBeanByClass(Class<T> clazz){ return applicationContext.getBean(clazz); } /** * 根据bean的class来查找所有的对象(包括子类) */ public static <T> Map<String, T> getBeansByClass(Class<T> c){ return applicationContext.getBeansOfType(c); } /** * 获取HttpServletRequest */ public static HttpServletRequest getRequest() { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); return attributes.getRequest(); } /** * 获取HttpSession */ public static HttpSession getSession() { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); return attributes.getRequest().getSession(); } /** * 获取完整的请求URL */ public static String getRequestUrl(){ return getRequestUrl(getRequest()); } /** * 获取完整的请求URL */ public static String getRequestUrl(HttpServletRequest request){ //当前请求路径 String currentUrl = request.getRequestURL().toString(); //请求参数 String queryString = request.getQueryString(); if(!StringUtils.isEmpty(queryString)){ currentUrl = currentUrl + "?" + queryString; } String result = ""; try { result = URLEncoder.encode(currentUrl,"UTF-8"); } catch (UnsupportedEncodingException e) { //ignore } return result; } /** * 获取请求的客户端IP */ public static String getRequestIp(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if(StringUtils.isNoneBlank(ip) && !"unKnown".equalsIgnoreCase(ip)){ //多次反向代理后会有多个ip值,第一个ip才是真实ip int index = ip.indexOf(","); if(index != -1){ return ip.substring(0,index); }else{ return ip; } } ip = request.getHeader("X-Real-IP"); if(StringUtils.isNoneBlank(ip) && !"unKnown".equalsIgnoreCase(ip)){ return ip; } return request.getRemoteAddr(); } }
分类:
spring
, spring boot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-09-10 ubuntu rabiit SVN
2019-09-10 运行mongo DB 官方镜像,以及基本操作,认证