From 038a92654aebaaa508e80769d05100a7d0046a81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sat, 17 Aug 2024 10:12:15 +0800 Subject: [PATCH] =?UTF-8?q?reset=20=E5=9B=9E=E6=BB=9A=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?spring=E6=BA=90=E7=A0=81=E4=B8=8A=E4=B8=8B=E6=96=87=E6=8C=81?= =?UTF-8?q?=E6=9C=89=E8=80=85(=E5=AD=98=E5=9C=A8=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9C=AA=E6=B8=85=E7=90=86=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-common/ruoyi-common-core/pom.xml | 7 - .../context/request/RequestContextHolder.java | 161 ------------------ .../dromara/common/log/aspect/LogAspect.java | 13 ++ .../common/log/event/LogEventListener.java | 14 -- 4 files changed, 13 insertions(+), 182 deletions(-) delete mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/org/springframework/web/context/request/RequestContextHolder.java diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml index 20c3ba22..84ab453a 100644 --- a/ruoyi-common/ruoyi-common-core/pom.xml +++ b/ruoyi-common/ruoyi-common-core/pom.xml @@ -104,13 +104,6 @@ transmittable-thread-local - - jakarta.faces - jakarta.faces-api - 4.1.0 - true - - diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/springframework/web/context/request/RequestContextHolder.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/springframework/web/context/request/RequestContextHolder.java deleted file mode 100644 index 7f9622db..00000000 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/springframework/web/context/request/RequestContextHolder.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright 2002-2023 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.context.request; - -import com.alibaba.ttl.TransmittableThreadLocal; -import jakarta.faces.context.FacesContext; -import org.springframework.lang.Nullable; -import org.springframework.util.ClassUtils; - -/** - * Holder class to expose the web request in the form of a thread-bound - * {@link RequestAttributes} object. The request will be inherited - * by any child threads spawned by the current thread if the - * {@code inheritable} flag is set to {@code true}. - * - *

Use {@link RequestContextListener} or - * {@link org.springframework.web.filter.RequestContextFilter} to expose - * the current web request. Note that - * already exposes the current request by default. - * - * 修改 spring 上下文存储方式 将 ThreadLocal 替换为 TransmittableThreadLocal - * 支持线程上下文切换变量传递 异步获取 spring 上下文 - * - * @author Juergen Hoeller - * @author Rod Johnson - * @since 2.0 - * @see RequestContextListener - * @see org.springframework.web.filter.RequestContextFilter - */ -public abstract class RequestContextHolder { - - private static final boolean jsfPresent = - ClassUtils.isPresent("jakarta.faces.context.FacesContext", RequestContextHolder.class.getClassLoader()); - - // ThreadLocal 替换为 TransmittableThreadLocal - private static final ThreadLocal requestAttributesHolder = - new TransmittableThreadLocal<>(); - - private static final ThreadLocal inheritableRequestAttributesHolder = - new TransmittableThreadLocal<>(); - - - /** - * Reset the RequestAttributes for the current thread. - */ - public static void resetRequestAttributes() { - requestAttributesHolder.remove(); - inheritableRequestAttributesHolder.remove(); - } - - /** - * Bind the given RequestAttributes to the current thread, - * not exposing it as inheritable for child threads. - * @param attributes the RequestAttributes to expose - * @see #setRequestAttributes(RequestAttributes, boolean) - */ - public static void setRequestAttributes(@Nullable RequestAttributes attributes) { - setRequestAttributes(attributes, false); - } - - /** - * Bind the given RequestAttributes to the current thread. - * @param attributes the RequestAttributes to expose, - * or {@code null} to reset the thread-bound context - * @param inheritable whether to expose the RequestAttributes as inheritable - * for child threads (using an {@link InheritableThreadLocal}) - */ - public static void setRequestAttributes(@Nullable RequestAttributes attributes, boolean inheritable) { - if (attributes == null) { - resetRequestAttributes(); - } - else { - if (inheritable) { - inheritableRequestAttributesHolder.set(attributes); - requestAttributesHolder.remove(); - } - else { - requestAttributesHolder.set(attributes); - inheritableRequestAttributesHolder.remove(); - } - } - } - - /** - * Return the RequestAttributes currently bound to the thread. - * @return the RequestAttributes currently bound to the thread, - * or {@code null} if none bound - */ - @Nullable - public static RequestAttributes getRequestAttributes() { - RequestAttributes attributes = requestAttributesHolder.get(); - if (attributes == null) { - attributes = inheritableRequestAttributesHolder.get(); - } - return attributes; - } - - /** - * Return the RequestAttributes currently bound to the thread. - *

Exposes the previously bound RequestAttributes instance, if any. - * Falls back to the current JSF FacesContext, if any. - * @return the RequestAttributes currently bound to the thread - * @throws IllegalStateException if no RequestAttributes object - * is bound to the current thread - * @see #setRequestAttributes - * @see ServletRequestAttributes - * @see FacesRequestAttributes - * @see jakarta.faces.context.FacesContext#getCurrentInstance() - */ - public static RequestAttributes currentRequestAttributes() throws IllegalStateException { - RequestAttributes attributes = getRequestAttributes(); - if (attributes == null) { - if (jsfPresent) { - attributes = FacesRequestAttributesFactory.getFacesRequestAttributes(); - } - if (attributes == null) { - throw new IllegalStateException("No thread-bound request found: " + - "Are you referring to request attributes outside of an actual web request, " + - "or processing a request outside of the originally receiving thread? " + - "If you are actually operating within a web request and still receive this message, " + - "your code is probably running outside of DispatcherServlet: " + - "In this case, use RequestContextListener or RequestContextFilter to expose the current request."); - } - } - return attributes; - } - - - /** - * Inner class to avoid hard-coded JSF dependency. - */ - private static class FacesRequestAttributesFactory { - - @Nullable - public static RequestAttributes getFacesRequestAttributes() { - try { - FacesContext facesContext = FacesContext.getCurrentInstance(); - return (facesContext != null ? new FacesRequestAttributes(facesContext) : null); - } - catch (NoClassDefFoundError err) { - // typically for com/sun/faces/util/Util if only the JSF API jar is present - return null; - } - } - } - -} diff --git a/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/aspect/LogAspect.java b/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/aspect/LogAspect.java index 6c563a4f..ce3fc04e 100644 --- a/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/aspect/LogAspect.java +++ b/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/aspect/LogAspect.java @@ -20,6 +20,8 @@ import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessStatus; import org.dromara.common.log.event.OperLogEvent; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.system.api.model.LoginUser; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.http.HttpMethod; import org.springframework.validation.BindingResult; @@ -86,6 +88,15 @@ public class LogAspect { // *========数据库日志=========*// OperLogEvent operLog = new OperLogEvent(); + operLog.setTenantId(LoginHelper.getTenantId()); + operLog.setStatus(BusinessStatus.SUCCESS.ordinal()); + // 请求的地址 + String ip = ServletUtils.getClientIP(); + operLog.setOperIp(ip); + operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255)); + LoginUser loginUser = LoginHelper.getLoginUser(); + operLog.setOperName(loginUser.getUsername()); + operLog.setDeptName(loginUser.getDeptName()); if (e != null) { operLog.setStatus(BusinessStatus.FAIL.ordinal()); @@ -95,6 +106,8 @@ public class LogAspect { String className = joinPoint.getTarget().getClass().getName(); String methodName = joinPoint.getSignature().getName(); operLog.setMethod(className + "." + methodName + "()"); + // 设置请求方式 + operLog.setRequestMethod(ServletUtils.getRequest().getMethod()); // 处理设置注解上的参数 getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult); // 设置消耗时间 diff --git a/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LogEventListener.java b/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LogEventListener.java index e0812dd7..3584e0c6 100644 --- a/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LogEventListener.java +++ b/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LogEventListener.java @@ -11,14 +11,12 @@ import org.dromara.common.core.constant.Constants; import org.dromara.common.core.utils.ServletUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.ip.AddressUtils; -import org.dromara.common.log.enums.BusinessStatus; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.system.api.RemoteClientService; import org.dromara.system.api.RemoteLogService; import org.dromara.system.api.domain.bo.RemoteLogininforBo; import org.dromara.system.api.domain.bo.RemoteOperLogBo; import org.dromara.system.api.domain.vo.RemoteClientVo; -import org.dromara.system.api.model.LoginUser; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; @@ -42,18 +40,6 @@ public class LogEventListener { @EventListener public void saveLog(OperLogEvent operLogEvent) { RemoteOperLogBo sysOperLog = BeanUtil.toBean(operLogEvent, RemoteOperLogBo.class); - sysOperLog.setTenantId(LoginHelper.getTenantId()); - sysOperLog.setStatus(BusinessStatus.SUCCESS.ordinal()); - // 请求的地址 - String ip = ServletUtils.getClientIP(); - sysOperLog.setOperIp(ip); - HttpServletRequest request = ServletUtils.getRequest(); - sysOperLog.setOperUrl(StringUtils.substring(request.getRequestURI(), 0, 255)); - LoginUser loginUser = LoginHelper.getLoginUser(); - sysOperLog.setOperName(loginUser.getUsername()); - sysOperLog.setDeptName(loginUser.getDeptName()); - // 设置请求方式 - sysOperLog.setRequestMethod(request.getMethod()); remoteLogService.saveLog(sysOperLog); }