package com.finance.common.utils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.util.HashMap; import java.util.Map; /** * web工具类 * * @author liheng */ public final class WebUtils extends org.springframework.web.util.WebUtils { /** * 当前请求 */ public static HttpServletRequest request() { return contextHolder() == null ? null : contextHolder().getRequest(); } /** * 当前响应 */ public static HttpServletResponse response() { return contextHolder() == null ? null : contextHolder().getResponse(); } /** * 当前session */ public static HttpSession session() { return request() == null ? null : request().getSession(); } /** * 当前ServletRequest */ public static ServletRequestAttributes contextHolder() { return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); } /** * 判断请求是否为 AJAX * * @param request 当前请求 */ public static boolean isAjax(HttpServletRequest request) { return "XMLHttpRequest".equals(request.getHeader("X-Requested-With")); } /** * 获取操作系统,浏览器及浏览器版本信息 * * @param request * @return */ public static Map getOsAndBrowserInfo(HttpServletRequest request) { Map map = new HashMap<>(2); String browserDetails = request.getHeader("User-Agent"); String userAgent = browserDetails; String user = userAgent.toLowerCase(); String os = ""; String browser = ""; //=================OS Info======================= if (userAgent.toLowerCase().contains("windows")) { os = "Windows"; } else if (userAgent.toLowerCase().contains("mac")) { os = "Mac"; } else if (userAgent.toLowerCase().contains("x11")) { os = "Unix"; } else if (userAgent.toLowerCase().contains("android")) { os = "Android"; } else if (userAgent.toLowerCase().contains("iphone")) { os = "IPhone"; } else { os = "UnKnown, More-Info: " + userAgent; } //===============Browser=========================== if (user.contains("edge")) { browser = (userAgent.substring(userAgent.indexOf("Edge")).split(" ")[0]).replace("/", "-"); } else if (user.contains("msie")) { String substring = userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0]; browser = substring.split(" ")[0].replace("MSIE", "IE") + "-" + substring.split(" ")[1]; } else if (user.contains("safari") && user.contains("version")) { browser = (userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0] + "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1]; } else if (user.contains("opr") || user.contains("opera")) { if (user.contains("opera")) { browser = (userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0] + "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1]; } else if (user.contains("opr")) { browser = ((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-")) .replace("OPR", "Opera"); } } else if (user.contains("chrome")) { browser = (userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-"); } else if ((user.contains("mozilla/7.0")) || (user.contains("netscape6")) || (user.contains("mozilla/4.7")) || (user.contains("mozilla/4.78")) || (user.contains("mozilla/4.08")) || (user.contains("mozilla/3"))) { browser = "Netscape-?"; } else if (user.contains("firefox")) { browser = (userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-"); } else if (user.contains("rv")) { String IEVersion = (userAgent.substring(userAgent.indexOf("rv")).split(" ")[0]).replace("rv:", "-"); browser = "IE" + IEVersion.substring(0, IEVersion.length() - 1); } else { browser = "UnKnown, More-Info: " + userAgent; } map.put("os", os); map.put("browser", browser); return map; } /** * 读取cookie * * @param name cookie name * @return cookie value */ public String getCookieVal(String name) { return getCookieVal(request(), name); } /** * 读取cookie * * @param request HttpServletRequest * @param name cookie name * @return cookie value */ public String getCookieVal(HttpServletRequest request, String name) { Cookie cookie = getCookie(request, name); return cookie != null ? cookie.getValue() : null; } /** * 清除 某个指定的cookie * * @param response HttpServletResponse * @param key cookie key */ public void removeCookie(HttpServletResponse response, String key) { setCookie(response, key, null, 0); } /** * 设置cookie * * @param response HttpServletResponse * @param name cookie name * @param value cookie value * @param maxAgeInSeconds maxage */ public void setCookie(HttpServletResponse response, String name, String value, int maxAgeInSeconds) { Cookie cookie = new Cookie(name, value); cookie.setPath("/"); cookie.setMaxAge(maxAgeInSeconds); //cookie.setHttpOnly(true); response.addCookie(cookie); } }