考虑下面的代码,
@RestController
@RequestMapping("/v1")
class Controller {
}
Run Code Online (Sandbox Code Playgroud)
我应该做的是,删除 @RequestMapping并通过application.properties配置路径。
我发现有两种方法可以实现这一目标,
spring.mvc.servlet.path=/v1
Run Code Online (Sandbox Code Playgroud)
和
server.servlet.contextPath=/v1
Run Code Online (Sandbox Code Playgroud)
但是它们有什么不同,因为我没有注意到这两种配置有任何区别?哪一个最适合我想要实现的目标?
控制器
@GetMapping("/api/data")
String response(){
}
Run Code Online (Sandbox Code Playgroud)
应用程序属性
server.servlet.context-path=/v1
Run Code Online (Sandbox Code Playgroud)
弹簧安全
http.authorizeRequests().anyMatcher("/v1/**").authenicated()
Run Code Online (Sandbox Code Playgroud)
这里没有发生身份验证。我相信, spring-security 忽略了application.properties 中配置的上下文路径。为什么 spring-security 忽略上下文路径。如何解决这个问题?
对于上图,我预计会出现 401,因为 v1/** 应该已获得授权
这工作正常,
http.authorizeRequests().anyMatcher("/**").authenicated()
Run Code Online (Sandbox Code Playgroud)