Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
topframe committed Mar 27, 2024
1 parent fc6469e commit 98bbb3c
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 20 deletions.
23 changes: 18 additions & 5 deletions web/src/main/java/com/aspectran/web/activity/WebActivity.java
Expand Up @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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 + "/")));
}

}
Expand Up @@ -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;
Expand Down
20 changes: 10 additions & 10 deletions web/src/main/java/com/aspectran/web/service/DefaultWebService.java
Expand Up @@ -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;
Expand Down Expand Up @@ -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)) {
Expand All @@ -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) {
Expand Down Expand Up @@ -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)) {
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -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<WildcardPattern> 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();
Expand Down Expand Up @@ -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;
}
Expand Down
11 changes: 11 additions & 0 deletions web/src/main/java/com/aspectran/web/support/util/WebUtils.java
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}

}

}
Expand Up @@ -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")
Expand Down

0 comments on commit 98bbb3c

Please sign in to comment.