package com.qianwen.core.tool.utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.util.Enumeration; import java.util.Objects; import java.util.function.Predicate; import javax.servlet.ServletInputStream; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.qianwen.core.tool.jackson.JsonUtil; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.method.HandlerMethod; import org.springframework.web.util.WebUtils; /* loaded from: blade-core-tool-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tool/utils/WebUtil.class */ public class WebUtil extends WebUtils { public static final String USER_AGENT_HEADER = "user-agent"; private static final Logger log = LoggerFactory.getLogger(WebUtil.class); private static final String[] IP_HEADER_NAMES = {"x-forwarded-for", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"}; private static final Predicate IP_PREDICATE = ip -> { return StringUtil.isBlank(ip) || StringPool.UNKNOWN.equalsIgnoreCase(ip); }; public static boolean isBody(HandlerMethod handlerMethod) { ResponseBody responseBody = ClassUtil.getAnnotation(handlerMethod, ResponseBody.class); return responseBody != null; } @Nullable public static String getCookieVal(String name) { HttpServletRequest request = getRequest(); Assert.notNull(request, "request from RequestContextHolder is null"); return getCookieVal(request, name); } @Nullable public static String getCookieVal(HttpServletRequest request, String name) { Cookie cookie = getCookie(request, name); if (cookie != null) { return cookie.getValue(); } return null; } public static void removeCookie(HttpServletResponse response, String key) { setCookie(response, key, null, 0); } public static void setCookie(HttpServletResponse response, String name, @Nullable String value, int maxAgeInSeconds) { Cookie cookie = new Cookie(name, value); cookie.setPath(StringPool.SLASH); cookie.setMaxAge(maxAgeInSeconds); cookie.setHttpOnly(true); response.addCookie(cookie); } public static HttpServletRequest getRequest() { RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); if (requestAttributes == null) { return null; } return (requestAttributes == null) ? null : ((ServletRequestAttributes)requestAttributes).getRequest(); } public static void renderJson(HttpServletResponse response, Object result) { renderJson(response, result, "application/json"); } public static void renderJson(HttpServletResponse response, Object result, String contentType) { response.setCharacterEncoding("UTF-8"); response.setContentType(contentType); try (PrintWriter out = response.getWriter()) { out.append(JsonUtil.toJson(result)); } catch (IOException e) { log.error(e.getMessage(), e); } } public static String getIP() { return getIP(getRequest()); } @Nullable public static String getIP(@Nullable HttpServletRequest request) { if (request == null) return StringPool.EMPTY; String ip = null; for (String ipHeader : IP_HEADER_NAMES) { ip = request.getHeader(ipHeader); if (!IP_PREDICATE.test(ip)) break; } if (IP_PREDICATE.test(ip)) ip = request.getRemoteAddr(); return StringUtil.isBlank(ip) ? null : StringUtil.splitTrim(ip, StringPool.COMMA)[0]; } public static String getHeader(String name) { HttpServletRequest request = getRequest(); return ((HttpServletRequest) Objects.requireNonNull(request)).getHeader(name); } public static Enumeration getHeaders(String name) { HttpServletRequest request = getRequest(); return ((HttpServletRequest) Objects.requireNonNull(request)).getHeaders(name); } public static Enumeration getHeaderNames() { HttpServletRequest request = getRequest(); return ((HttpServletRequest) Objects.requireNonNull(request)).getHeaderNames(); } public static String getParameter(String name) { HttpServletRequest request = getRequest(); return ((HttpServletRequest) Objects.requireNonNull(request)).getParameter(name); } public static String getRequestBody(ServletInputStream servletInputStream) { StringBuilder sb = new StringBuilder(); BufferedReader reader = null; try { try { reader = new BufferedReader(new InputStreamReader((InputStream) servletInputStream, StandardCharsets.UTF_8)); while (true) { String line = reader.readLine(); if (line == null) { break; } sb.append(line); } if (servletInputStream != null) { try { servletInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (reader != null) { try { reader.close(); } catch (IOException e2) { e2.printStackTrace(); } } } catch (IOException e3) { e3.printStackTrace(); if (servletInputStream != null) { try { servletInputStream.close(); } catch (IOException e4) { e4.printStackTrace(); } } if (reader != null) { try { reader.close(); } catch (IOException e5) { e5.printStackTrace(); } } } return sb.toString(); } catch (Throwable th) { if (servletInputStream != null) { try { servletInputStream.close(); } catch (IOException e6) { e6.printStackTrace(); } } if (reader != null) { try { reader.close(); } catch (IOException e7) { e7.printStackTrace(); } } throw th; } } public static String getRequestContent(HttpServletRequest request) { try { String queryString = request.getQueryString(); if (StringUtil.isNotBlank(queryString)) { return new String(queryString.getBytes(Charsets.ISO_8859_1), Charsets.UTF_8).replaceAll("&", StringPool.AMPERSAND).replaceAll("%22", StringPool.QUOTE); } String charEncoding = request.getCharacterEncoding(); if (charEncoding == null) { charEncoding = "UTF-8"; } byte[] buffer = getRequestBody(request.getInputStream()).getBytes(); String str = new String(buffer, charEncoding).trim(); if (StringUtil.isBlank(str)) { StringBuilder sb = new StringBuilder(); Enumeration parameterNames = request.getParameterNames(); while (parameterNames.hasMoreElements()) { String key = parameterNames.nextElement(); String value = request.getParameter(key); StringUtil.appendBuilder(sb, key, StringPool.EQUALS, value, StringPool.AMPERSAND); } str = StringUtil.removeSuffix(sb.toString(), StringPool.AMPERSAND); } return str.replaceAll("&", StringPool.AMPERSAND); } catch (Exception ex) { ex.printStackTrace(); return StringPool.EMPTY; } } }