Spring 安全忽略上下文路径

Spring Security ignoring context-path

控制器

@GetMapping("/api/data")
String response(){

}

application.properties

server.servlet.context-path=/v1

Spring 安全

http.authorizeRequests().anyMatcher("/v1/**").authenicated()

这里没有进行身份验证。我相信,spring-security 忽略了在 application.properties 中配置的上下文路径 。为什么 spring-security 会忽略上下文路径。如何解决这个问题?

对于上图,我预计会出现 401,因为 v1/** 应该已获得授权

这工作正常,

http.authorizeRequests().anyMatcher("/**").authenicated()

打开 Spring 安全的调试,然后你就会明白发生了什么。

@EnableWebSecurity(debug = true)

当,

server.servlet.context-path=/v1

生成的请求:

Request received for GET '/api/data':

servletPath:/api/data
pathInfo:null

当,

spring.mvc.servlet.path=/v1

生成的请求:

Request received for GET '/v1/api/data':

servletPath:/v1
pathInfo:/api/data

使用 servlet-path 来实现你想要实现的...