• SpringContextUtils Spring 工具类


    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();
        }
    
    }
  • 相关阅读:
    [linux] shell脚本编程-ubuntu创建vsftpd服务
    [linux] C语言Linux系统编程-做成守护进程
    [编程] C语言Linux系统编程-等待终止的子进程(僵死进程)
    [Linux]C语言Linux系统编程创建进程
    [linux] C语言Linux系统编程进程基本概念
    [编程] C语言枚举类型(Enum)
    [编程] C语言结构体指针作为函数参数
    [编程] C语言的二级指针
    [编程] C语言的结构体
    [编程] C语言循环结构计算π的值
  • 原文地址:https://www.cnblogs.com/lshan/p/15250497.html
Copyright © 2020-2023  润新知