在Spring Boot 1.5.9应用程序中,我想使用Google Chrome通过HTTP访问静态资源。
在Docker中,我有 404 error,它在嵌入式tomcat中工作良好。
404
这是Dockerfile:
Dockerfile
FROM openjdk:8-jre-alpine VOLUME /tmp RUN addgroup -S spring --gid 13371 && adduser -S spring -G spring --uid 13371 RUN mkdir -p /srv/upload RUN chown -R spring:spring /srv/upload ADD *.jar app.jar RUN sh -c 'touch /app.jar' USER spring:spring ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=UTC","-jar","/app.jar"]
这就是我配置静态资源的方式:
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**") .addResourceLocations("file:upload/images/") .setCachePeriod(0); } }
这是我从docker 中的* chrome访问URL时的结果日志 *http://localhost:8080/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png
http://localhost:8080/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png
Counting up[http-nio-8080-Acceptor-0] latch=1 Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@45deea1:org.apache.tomcat.util.net.NioChannel@68f517c7:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:47510]], Read from buffer: [0] Received [GET /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png HTTP/1.1 Host: localhost:8080 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 Sec-Fetch-Dest: document Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Sec-Fetch-Site: none Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9,fr-FR;q=0.8,fr;q=0.7,ru-RU;q=0.6,ru;q=0.5,vi-VN;q=0.4,vi;q=0.3 ] Security checking request GET /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png No applicable constraints defined Not subject to any constraint Bound request context to thread: org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper@1f960fc1 Trying to match using Ant [pattern='/oauth/token'] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/oauth/token' Trying to match using Ant [pattern='/oauth/token_key'] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/oauth/token_key' Trying to match using Ant [pattern='/oauth/check_token'] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/oauth/check_token' No matches found Trying to match using Ant [pattern='/favicon.ico'] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/favicon.ico' Trying to match using Ant [pattern='/favicon.png'] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/favicon.png' Trying to match using Ant [pattern='/login'] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/login' Trying to match using Ant [pattern='/logout'] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/logout' Trying to match using Ant [pattern='/ping'] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/ping' Trying to match using Ant [pattern='/oauth/authorize'] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/oauth/authorize' Trying to match using Ant [pattern='/cb/**'] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/cb/**' Trying to match using Ant [pattern='/'] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/' Trying to match using Ant [pattern='/public/**'] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/public/**' Trying to match using Ant [pattern='/resources/**'] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/resources/**' matched /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png at position 1 of 11 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter' /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png at position 2 of 11 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter' Set encoding to ISO-8859-1 No HttpSession currently exists No SecurityContext was available from the HttpSession: null. A new one will be created. /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png at position 3 of 11 in additional filter chain; firing Filter: 'HeaderWriterFilter' Not injecting HSTS header since it did not match the requestMatcher org.springframework.security.web.header.writers.HstsHeaderWriter$SecureRequestMatcher@1877aac3 /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png at position 4 of 11 in additional filter chain; firing Filter: 'LogoutFilter' Trying to match using Ant [pattern='/logout', GET] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/logout' Trying to match using Ant [pattern='/logout', POST] Request 'GET /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png' doesn't match 'POST /logout Trying to match using Ant [pattern='/logout', PUT] Request 'GET /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png' doesn't match 'PUT /logout Trying to match using Ant [pattern='/logout', DELETE] Request 'GET /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png' doesn't match 'DELETE /logout No matches found /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png at position 5 of 11 in additional filter chain; firing Filter: 'UsernamePasswordAuthenticationFilter' Request 'GET /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png' doesn't match 'POST /login /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png at position 6 of 11 in additional filter chain; firing Filter: 'RequestCacheAwareFilter' /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png at position 7 of 11 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter' /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png at position 8 of 11 in additional filter chain; firing Filter: 'AnonymousAuthenticationFilter' Populated SecurityContextHolder with anonymous token: 'org.springframework.security.authentication.AnonymousAuthenticationToken@9055e4a6: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 127.0.0.1; SessionId: null; Granted Authorities: ROLE_ANONYMOUS' /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png at position 9 of 11 in additional filter chain; firing Filter: 'SessionManagementFilter' /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png at position 10 of 11 in additional filter chain; firing Filter: 'ExceptionTranslationFilter' /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png at position 11 of 11 in additional filter chain; firing Filter: 'FilterSecurityInterceptor' Trying to match using Ant [pattern='/logout', GET] Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/logout' Trying to match using Ant [pattern='/logout', POST] Request 'GET /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png' doesn't match 'POST /logout Trying to match using Ant [pattern='/logout', PUT] Request 'GET /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png' doesn't match 'PUT /logout Trying to match using Ant [pattern='/logout', DELETE] Request 'GET /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png' doesn't match 'DELETE /logout No matches found Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/favicon.ico' Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/favicon.png' Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/ping' Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/public/**' Checking match of request : '/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png'; against '/resources/**' Secure object: FilterInvocation: URL: /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png; Attributes: [permitAll] Previously Authenticated: org.springframework.security.authentication.AnonymousAuthenticationToken@9055e4a6: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 127.0.0.1; SessionId: null; Granted Authorities: ROLE_ANONYMOUS Voter: org.springframework.security.web.access.expression.WebExpressionVoter@6f01175d, returned: 1 Authorization successful RunAsManager did not change Authentication object /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png reached end of additional filter chain; proceeding with original chain DispatcherServlet with name 'dispatcherServlet' processing GET request for [/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png] Looking up handler method for path /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png looking up handler for path: /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png Did not find handler method for [/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png] Looking up handler method for path /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png Did not find handler method for [/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png] Looking up handler method for path /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png Did not find handler method for [/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png] Looking up handler method for path /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png Did not find handler method for [/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png] Looking up handler method for path /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png Did not find handler method for [/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png] Looking up handler method for path /resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png Did not find handler method for [/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png] Matching patterns for request [/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png] are [/resources/**, /**] URI Template variables for request [/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png] are {} Mapping [/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png] to HandlerExecutionChain with handler [ResourceHttpRequestHandler [locations=[URL [file:upload/images/], class path resource [META-INF/resources/], class path resource [resources/], class path resource [static/], class path resource [public/]], resolvers=[org.springframework.web.servlet.resource.PathResourceResolver@6f49d153]]] and 1 interceptor Last-Modified value for [/resources/promotions/37/lg/31723d95-eec3-4ff9-aa42-e3477559e9df.png] is: -1 SecurityContext is empty or contents are anonymous - context will not be stored in HttpSession. Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling Successfully completed request Chain processed normally SecurityContextHolder now cleared, as request processing completed Cleared thread-bound request context: org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper@1f960fc1 Processing ErrorPage[errorCode=0, location=/error] DispatcherServlet with name 'dispatcherServlet' processing GET request for [/error] Looking up handler method for path /error looking up handler for path: /error Did not find handler method for [/error] Looking up handler method for path /error Did not find handler method for [/error] Looking up handler method for path /error Returning handler method [public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)] Returning cached instance of singleton bean 'basicErrorController' Last-Modified value for [/error] is: -1 Requested media types are [text/html, text/html;q=0.8] based on Accept header types and producible media types [text/html]) Returning cached instance of singleton bean 'error' Returning [org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$SpelView@351e414e] based on requested media type 'text/html' Rendering view [org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$SpelView@351e414e] in DispatcherServlet with name 'dispatcherServlet' Successfully completed request Disabling the response for further output Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@45deea1:org.apache.tomcat.util.net.NioChannel@68f517c7:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:47510]], Read from buffer: [0] Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@45deea1:org.apache.tomcat.util.net.NioChannel@68f517c7:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:47510]], Status in: [OPEN_READ], State out: [OPEN]
这是我在访问环境中的期望(在开发环境中) http://localhost:8080/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg
http://localhost:8080/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg
Counting up[http-nio-8080-Acceptor-0] latch=1 Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@4d64a855:org.apache.tomcat.util.net.NioChannel@3eaf8ba0:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:59330]], Read from buffer: [0] Received [GET /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg HTTP/1.1 Host: localhost:8080 Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 Sec-Fetch-Dest: document Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Sec-Fetch-Site: none Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9,fr-FR;q=0.8,fr;q=0.7,ru-RU;q=0.6,ru;q=0.5,vi-VN;q=0.4,vi;q=0.3 ] Security checking request GET /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg No applicable constraints defined Not subject to any constraint Bound request context to thread: org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper@29e45b2 Trying to match using Ant [pattern='/'] Checking match of request : '/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg'; against '/' Trying to match using Ant [pattern='/public/**'] Checking match of request : '/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg'; against '/public/**' Trying to match using Ant [pattern='/resources/**'] Checking match of request : '/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg'; against '/resources/**' matched /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg at position 1 of 11 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter' /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg at position 2 of 11 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter' Set encoding to ISO-8859-1 No HttpSession currently exists No SecurityContext was available from the HttpSession: null. A new one will be created. /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg at position 3 of 11 in additional filter chain; firing Filter: 'HeaderWriterFilter' Not injecting HSTS header since it did not match the requestMatcher org.springframework.security.web.header.writers.HstsHeaderWriter$SecureRequestMatcher@204c4db /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg at position 4 of 11 in additional filter chain; firing Filter: 'LogoutFilter' Trying to match using Ant [pattern='/logout', GET] Checking match of request : '/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg'; against '/logout' Trying to match using Ant [pattern='/logout', POST] Request 'GET /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg' doesn't match 'POST /logout Trying to match using Ant [pattern='/logout', PUT] Request 'GET /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg' doesn't match 'PUT /logout Trying to match using Ant [pattern='/logout', DELETE] Request 'GET /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg' doesn't match 'DELETE /logout No matches found /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg at position 5 of 11 in additional filter chain; firing Filter: 'UsernamePasswordAuthenticationFilter' Request 'GET /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg' doesn't match 'POST /login /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg at position 6 of 11 in additional filter chain; firing Filter: 'RequestCacheAwareFilter' /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg at position 7 of 11 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter' /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg at position 8 of 11 in additional filter chain; firing Filter: 'AnonymousAuthenticationFilter' Populated SecurityContextHolder with anonymous token: 'org.springframework.security.authentication.AnonymousAuthenticationToken@9055e4a6: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 127.0.0.1; SessionId: null; Granted Authorities: ROLE_ANONYMOUS' /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg at position 9 of 11 in additional filter chain; firing Filter: 'SessionManagementFilter' /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg at position 10 of 11 in additional filter chain; firing Filter: 'ExceptionTranslationFilter' /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg at position 11 of 11 in additional filter chain; firing Filter: 'FilterSecurityInterceptor' No matches found g/843291ef-2309-4809-9f37-38257e087a97.jpeg'; against '/public/**' Checking match of request : '/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg'; against '/resources/**' Secure object: FilterInvocation: URL: /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg; Attributes: [permitAll] Previously Authenticated: org.springframework.security.authentication.AnonymousAuthenticationToken@9055e4a6: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 127.0.0.1; SessionId: null; Granted Authorities: ROLE_ANONYMOUS Voter: org.springframework.security.web.access.expression.WebExpressionVoter@199cd81c, returned: 1 Authorization successful RunAsManager did not change Authentication object /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg reached end of additional filter chain; proceeding with original chain DispatcherServlet with name 'dispatcherServlet' processing GET request for [/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg] Looking up handler method for path /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg looking up handler for path: /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg Did not find handler method for [/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg] Looking up handler method for path /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg Did not find handler method for [/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg] Looking up handler method for path /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg Did not find handler method for [/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg] Looking up handler method for path /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg Did not find handler method for [/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg] Looking up handler method for path /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg Did not find handler method for [/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg] Looking up handler method for path /resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg Did not find handler method for [/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg] Matching patterns for request [/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg] are [/resources/**, /**] URI Template variables for request [/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg] are {} Mapping [/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg] to HandlerExecutionChain with handler [ResourceHttpRequestHandler [locations=[URL [file:upload/images/], class path resource [META-INF/resources/], class path resource [resources/], class path resource [static/], class path resource [public/]], resolvers=[org.springframework.web.servlet.resource.PathResourceResolver@49a0fe14]]] and 1 interceptor Last-Modified value for [/resources/promotions/39/lg/843291ef-2309-4809-9f37-38257e087a97.jpeg] is: -1 SecurityContext is empty or contents are anonymous - context will not be stored in HttpSession. Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling Successfully completed request
我已经在本地复制了生产环境,并且file:/srv/upload/images在开发中使用了相同的绝对路径,因此可以确认docker中的状态码是否不同:
file:/srv/upload/images
问题与路径不同无关,仅与docker有关。
任何提示将不胜感激。
我的信誉度不足,无法发表评论,所以写我的评论作为答案:(
我在docker和资源上也遇到了类似的问题,所以我想为您提供帮助。
您可以提供具有TRACE级别的日志吗?此级别可帮助我们查看内部发生的情况,PathResourceResolver并且在大多数情况下根据此实现情况使用跟踪。
TRACE
PathResourceResolver
就我而言,它很有用并对我有所帮助。
根据这个
您可以通过使用–trace标志(或application.properties中的trace = true)启动应用程序来启用“跟踪”模式。