spring version: 5.2.4.RELEASE websphere liberty: runtimes-wlp-javaee8.
url mapping is "xxxx/**" and request url is "xxxx/". it will been redirected to "/".
By looking at the source code i have find the spring will to read com.ibm.ws.webcontainer.removetrailingservletpathslash from com.ibm.ws.webcontainer.WebContainer.getWebContainerProperties().
1. websphere liberty(runtimes-wlp-javaee8) can not set this property.
2. Class<?> cl = classLoader.loadClass(className);
Properties prop = (Properties) cl.getMethod(methodName).invoke(null);
this code can not get the getWebContainerProperties method.
Static trace is
[err] java.lang.NoClassDefFoundError: com/ibm/wsspi/adaptable/module/UnableToAdaptException
[err] at java.lang.Class.getDeclaredMethods0(Native Method)
[err] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
[err] at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
[err] at java.lang.Class.getMethod0(Class.java:3018)
[err] at java.lang.Class.getMethod(Class.java:1784)
[err] at org.springframework.web.util.UrlPathHelper.shouldRemoveTrailingServletPathSlash(UrlPathHelper.java:613)
[err] at org.springframework.web.util.UrlPathHelper.getServletPath(UrlPathHelper.java:385)
[err] at org.springframework.web.util.UrlPathHelper.getPathWithinServletMapping(UrlPathHelper.java:217)
[err] at org.springframework.web.util.UrlPathHelper.getLookupPathForRequest(UrlPathHelper.java:172)
[err] at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:363)
[err] at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:110)
[err] at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:59)
[err] at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:395)
[err] at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1234)
[err] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1016)
[err] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
[err] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
[err] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
[err] at javax.servlet.http.HttpServlet.service(HttpServlet.java:686)
[err] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
[err] at javax.servlet.http.HttpServlet.service(HttpServlet.java:791)
[err] at [internal classes]
[err] at inetsoft.web.security.SessionAccessFilter.doFilterInternal(SessionAccessFilter.java:38)
[err] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
[err] at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
[err] at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
[err] at [internal classes]
[err] at inetsoft.web.security.JWTFilter.doFilter(JWTFilter.java:81)
[err] at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
[err] at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
[err] at [internal classes]
[err] at inetsoft.web.security.RequestPrincipalFilter.doFilter(RequestPrincipalFilter.java:57)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
[err] at [internal classes]
[err] at inetsoft.web.security.CSRFFilter.doFilter(CSRFFilter.java:73)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
[err] at [internal classes]
[err] at inetsoft.web.security.AnonymousUserFilter.doFilter(AnonymousUserFilter.java:90)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
[err] at [internal classes]
[err] at inetsoft.web.security.DefaultAuthorizationFilter.doFilter(DefaultAuthorizationFilter.java:84)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
[err] at [internal classes]
[err] at inetsoft.web.security.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
[err] at [internal classes]
[err] at inetsoft.web.security.LogoutFilter.doFilter(LogoutFilter.java:35)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
[err] at [internal classes]
[err] at inetsoft.web.security.InvalidateSessionFilter.doFilter(InvalidateSessionFilter.java:54)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
[err] at [internal classes]
[err] at inetsoft.web.security.SecurityHeaderFilter.doFilter(SecurityHeaderFilter.java:61)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
[err] at [internal classes]
[err] at inetsoft.web.security.WebSocketLimitFilter.doFilter(WebSocketLimitFilter.java:84)
[err] at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
[err] at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
[err] at [internal classes]
[err] at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:141)
[err] at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82)
[err] at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
[err] at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
[err] at [internal classes]
[err] at inetsoft.web.SafeInputStreamFilter.doFilter(SafeInputStreamFilter.java:48)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
[err] at [internal classes]
[err] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[err] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[err] at java.lang.Thread.run(Thread.java:748)
[err] Caused by: java.lang.ClassNotFoundException: com.ibm.wsspi.adaptable.module.UnableToAdaptException
[err] at com.ibm.ws.classloading.internal.AppClassLoader.findClassCommonLibraryClassLoaders(AppClassLoader.java:557)
[err] at [internal classes]
[err] at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
[err] at com.ibm.ws.classloading.internal.AppClassLoader.findOrDelegateLoadClass(AppClassLoader.java:535)
[err] at [internal classes]
[err] at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
[err] ... 100 more
Comment From: rstoyanchev
Look like the property is still there but not allowed for use but perhaps it can't be accessed.
Is this causing an actual issue or is it just about the log message?
Comment From: nelsoncaoGithub
@rstoyanchev it will cause a issue, please look at image.
the request Uri will be changed to
"/" when it is "/api/portal/data/browser/" Because the servletPath was been removed trailing slash. so i can not request the "/api/portal/data/browser/" .
the controller mapping is
@GetMapping("api/portal/data/browser/**")
public Object browser(@RemainingPath String folderPath)
Comment From: nelsoncaoGithub
it is a issue. There are good ways to avoid it?
Comment From: rstoyanchev
Sorry I don't really know. I guess it depends on whether WLP has some API we can use to check the setting. Aside from that I don't see much else but configure the server to not remove trailing slashes.