diff --git a/web/src/main/java/com/aspectran/web/activity/WebActivity.java b/web/src/main/java/com/aspectran/web/activity/WebActivity.java index 96095c2b1..57943076a 100755 --- a/web/src/main/java/com/aspectran/web/activity/WebActivity.java +++ b/web/src/main/java/com/aspectran/web/activity/WebActivity.java @@ -28,8 +28,8 @@ import com.aspectran.core.context.rule.type.MethodType; import com.aspectran.core.support.i18n.locale.LocaleChangeInterceptor; import com.aspectran.core.support.i18n.locale.LocaleResolver; -import com.aspectran.utils.Assert; import com.aspectran.utils.StringUtils; +import com.aspectran.utils.annotation.jsr305.NonNull; import com.aspectran.web.activity.request.MultipartFormDataParser; import com.aspectran.web.activity.request.MultipartRequestParseException; import com.aspectran.web.activity.request.WebRequestBodyParser; @@ -38,6 +38,7 @@ import com.aspectran.web.adapter.HttpSessionAdapter; import com.aspectran.web.support.http.HttpHeaders; import com.aspectran.web.support.http.MediaType; +import jakarta.servlet.ServletContext; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -79,10 +80,7 @@ public boolean isRequestWithContextPath() { return false; } if (requestWithContextPath == null) { - Assert.state(isAdapted(), "Not yet adapted"); - String forwardedPath = getRequestAdapter().getHeader(HttpHeaders.X_FORWARDED_PATH); - requestWithContextPath = (forwardedPath == null || - !(getContextPath().equals(forwardedPath) || forwardedPath.startsWith(getContextPath() + "/"))); + requestWithContextPath = isRequestWithContextPath(getContextPath(), request); } return requestWithContextPath; } @@ -215,4 +213,19 @@ protected LocaleResolver resolveLocale() { return localeResolver; } + /** + * Returns whether the actual request URI contains a context path. + * @param servletContext the {@link ServletContext} + * @param request the {@link HttpServletRequest} object contains the client's request + * @return true if request name with context path, false otherwise. + */ + public static boolean isRequestWithContextPath(String servletContext, @NonNull HttpServletRequest request) { + if (servletContext == null) { + return false; + } + String forwardedPath = request.getHeader(HttpHeaders.X_FORWARDED_PATH); + return (forwardedPath == null || + !(servletContext.equals(forwardedPath) || forwardedPath.startsWith(servletContext + "/"))); + } + } diff --git a/web/src/main/java/com/aspectran/web/service/DefaultServletHttpRequestHandler.java b/web/src/main/java/com/aspectran/web/service/DefaultServletHttpRequestHandler.java index 33089f547..cee02c4b6 100755 --- a/web/src/main/java/com/aspectran/web/service/DefaultServletHttpRequestHandler.java +++ b/web/src/main/java/com/aspectran/web/service/DefaultServletHttpRequestHandler.java @@ -16,7 +16,6 @@ package com.aspectran.web.service; import com.aspectran.utils.ClassUtils; -import com.aspectran.utils.annotation.jsr305.NonNull; import com.aspectran.utils.logging.Logger; import com.aspectran.utils.logging.LoggerFactory; import jakarta.servlet.RequestDispatcher; diff --git a/web/src/main/java/com/aspectran/web/service/DefaultWebService.java b/web/src/main/java/com/aspectran/web/service/DefaultWebService.java index 2aec5797c..cbc920716 100644 --- a/web/src/main/java/com/aspectran/web/service/DefaultWebService.java +++ b/web/src/main/java/com/aspectran/web/service/DefaultWebService.java @@ -35,6 +35,7 @@ import com.aspectran.utils.logging.LoggerFactory; import com.aspectran.web.activity.WebActivity; import com.aspectran.web.support.http.HttpHeaders; +import com.aspectran.web.support.util.WebUtils; import jakarta.servlet.AsyncContext; import jakarta.servlet.AsyncEvent; import jakarta.servlet.AsyncListener; @@ -75,13 +76,7 @@ public void service(HttpServletRequest request, HttpServletResponse response) th requestUri = request.getRequestURI(); } - final String requestName; - if (getContextPath() != null) { - requestName = requestUri.substring(getContextPath().length()); - } else { - requestName = requestUri; - } - + final String requestName = WebUtils.getRelativePath(getContextPath(), requestUri); if (!isExposable(requestName)) { try { if (!getDefaultServletHttpRequestHandler().handleRequest(request, response)) { @@ -95,7 +90,7 @@ public void service(HttpServletRequest request, HttpServletResponse response) th } if (logger.isDebugEnabled()) { - logger.debug(getRequestInfo(request)); + logger.debug(getRequestInfo(request, requestUri, requestName)); } if (pauseTimeout != 0L) { @@ -274,10 +269,15 @@ private void sendError(HttpServletResponse response, int sc, String msg) { } @NonNull - private String getRequestInfo(@NonNull HttpServletRequest request) { + private String getRequestInfo(@NonNull HttpServletRequest request, String requestUri, String requestName) { StringBuilder sb = new StringBuilder(); sb.append(request.getMethod()).append(" "); - sb.append(request.getRequestURI()).append(" "); + if (WebActivity.isRequestWithContextPath(getContextPath(), request)) { + sb.append(requestUri); + } else { + sb.append(requestName); + } + sb.append(" "); sb.append(request.getProtocol()).append(" "); String remoteAddr = request.getHeader(HttpHeaders.X_FORWARDED_FOR); if (!StringUtils.isEmpty(remoteAddr)) { diff --git a/web/src/main/java/com/aspectran/web/servlet/filter/WebActivityFilter.java b/web/src/main/java/com/aspectran/web/servlet/filter/WebActivityFilter.java index 2a71270f7..45d8ee0f8 100644 --- a/web/src/main/java/com/aspectran/web/servlet/filter/WebActivityFilter.java +++ b/web/src/main/java/com/aspectran/web/servlet/filter/WebActivityFilter.java @@ -24,6 +24,7 @@ import com.aspectran.utils.wildcard.WildcardPattern; import com.aspectran.web.service.DefaultServletHttpRequestHandler; import com.aspectran.web.service.WebService; +import com.aspectran.web.support.util.WebUtils; import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.FilterConfig; @@ -59,11 +60,11 @@ public void init(@NonNull FilterConfig filterConfig) { String bypassesParam = filterConfig.getInitParameter("bypasses"); if (bypassesParam != null) { - String[] bypasses = StringUtils.tokenize(bypassesParam, BYPASS_PATTERN_DELIMITERS); + String[] bypasses = StringUtils.tokenize(bypassesParam, BYPASS_PATTERN_DELIMITERS, true); if (bypasses.length > 0) { List bypassPatterns = new ArrayList<>(bypasses.length); for (String path : bypasses) { - bypassPatterns.add(WildcardPattern.compile(path.trim(), ActivityContext.NAME_SEPARATOR_CHAR)); + bypassPatterns.add(WildcardPattern.compile(path, ActivityContext.NAME_SEPARATOR_CHAR)); } ServletContext servletContext = filterConfig.getServletContext(); @@ -91,8 +92,9 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha throws IOException, ServletException { if (request instanceof HttpServletRequest httpRequest && response instanceof HttpServletResponse httpResponse) { if (bypassPatterns != null) { + String requestName = WebUtils.getRelativePath(httpRequest.getContextPath(), httpRequest.getRequestURI()); for (WildcardPattern pattern : bypassPatterns) { - if (pattern.matches(httpRequest.getRequestURI())) { + if (pattern.matches(requestName)) { if (defaultServletHttpRequestHandler.handleRequest(httpRequest, httpResponse)) { return; } diff --git a/web/src/main/java/com/aspectran/web/support/util/WebUtils.java b/web/src/main/java/com/aspectran/web/support/util/WebUtils.java index 0c860d1ce..19bbf4ff1 100644 --- a/web/src/main/java/com/aspectran/web/support/util/WebUtils.java +++ b/web/src/main/java/com/aspectran/web/support/util/WebUtils.java @@ -17,6 +17,8 @@ import com.aspectran.core.activity.Translet; import com.aspectran.utils.Assert; +import com.aspectran.utils.StringUtils; +import com.aspectran.utils.annotation.jsr305.NonNull; import com.aspectran.utils.annotation.jsr305.Nullable; import com.aspectran.web.activity.request.RequestHeaderParser; import com.aspectran.web.support.http.HttpMediaTypeNotAcceptableException; @@ -96,4 +98,13 @@ public static boolean isAcceptContentTypes(Translet translet, MediaType... conte return false; } + public static String getRelativePath(String contextPath, @NonNull String requestUri) { + if (StringUtils.hasLength(contextPath)) { + return requestUri.substring(contextPath.length()); + } else { + return requestUri; + } + + } + } diff --git a/with-jetty/src/main/java/com/aspectran/jetty/server/GracefulShutdown.java b/with-jetty/src/main/java/com/aspectran/jetty/server/GracefulShutdown.java index 85fd9d48a..24e292794 100644 --- a/with-jetty/src/main/java/com/aspectran/jetty/server/GracefulShutdown.java +++ b/with-jetty/src/main/java/com/aspectran/jetty/server/GracefulShutdown.java @@ -50,7 +50,7 @@ void shutDownGracefully(@NonNull GracefulShutdownCallback callback) { shutdown(connector); } this.shuttingDown = true; - new Thread(() -> awaitShutdown(callback), "jetty-shutdown").start(); + new Thread(() -> awaitShutdown(callback), "shutdown").start(); } @SuppressWarnings("unchecked")