将Spring Rest Controller映射到一个不带servlet上下文的路径

4

我有一个Spring Boot应用程序,其上下文路径如下:

server.servlet.context-path:/api

我需要编写一个rest控制器,将其映射到http://localhost:8080/logout而不是http://localhost:8080/api/logout。有没有办法实现这个目标?更改“server.servelt.context-path”值不是一个选项。

这是我的尝试,但并没有起作用:

@GetMapping(value="../signout"){
public void logout(){
}

你的问题是什么? - mentallurg
2
不,这是不可能的。你们两个想要不同的上下文路径,并且拒绝更改使用的路径。 - JB Nizet
http://localhost:8080/api/logout有什么问题? - RobOhRob
1
我想这样做的原因是/api受我们的Siteminder保护。但是根据Siteminder SME的要求,注销URL需要是一个未受保护的路径。因此,注销URL中不需要上下文路径。 - Nero
不确定什么是siteminder......但是你可以明确地在../api/logout路径上删除安全性。 - RobOhRob
显示剩余3条评论
2个回答

1
尼禄,你说你无法更改“server.servlet.context-path”的值。我敢打赌你这样说是因为你不想破坏API,但我认为你可以在不破坏API的情况下成功更改此项设置。将上下文路径设置为空白,这是被允许的。然后在你的应用程序中将“api”映射(我假设它目前为“/”)更改为“api”。
  1. server.servlet.context-path:/api更改为server.servlet.context-path:/或者server.servlet.context-path:(没有斜杠)。 (据说这是默认设置,所以你可能需要完全删除此条目。)
  2. 在你的应用程序中的某个位置将@RequestMapping("/")更改为@RequestMapping("/api")
现在,你也可以使用@GetMapping(value="/signout"),同时可以在http://localhost:8080/logouthttp://localhost:8080/api处获取资源。
我不知道你使用的映射注释是什么,但希望这足够清楚了。

0

在该应用程序中可能无法超出其上下文根。也许您可以为该特定URL创建一个单独的Rest服务应用程序,然后从那里开始。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接