【问题标题】:Map spring rest controller to a path without the servlet context将 spring rest 控制器映射到没有 servlet 上下文的路径
【发布时间】:2019-10-18 19:51:16
【问题描述】:

我有一个带有以下上下文路径的 Spring Boot 应用程序:

server.servlet.context-path:/api

我需要编写一个映射到的休息控制器 http://localhost:8080/logout 而不是http://localhost:8080/api/logout

有没有办法做到这一点?更改“server.servelt.context-path”值不是一种选择。

这是我尝试过但没有奏效的方法:

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

【问题讨论】:

  • 你的问题到底是什么?
  • 不,这是不可能的。你们都想要一个不同的上下文路径,并且拒绝改变你使用的那个。
  • 当你设置上下文路径时......你是说你的整个应用程序都在那个路径下
  • http://localhost:8080/api/logout 有什么问题
  • 我想这样做的原因是 /api 受到我们的站点管理员的保护。但是根据 siteminder SME,注销 url 必须是不受保护的路径。因此需要在注销 url 中没有上下文路径

标签: java spring rest spring-boot


【解决方案1】:

Nero,你说你不能改变“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 的资源。

我不知道您碰巧使用的是什么映射注释,但希望这已经足够清楚了。

【讨论】:

    【解决方案2】:

    在该应用程序中可能无法超出其上下文根。也许您可以为该特定 url 创建一个单独的 Rest 服务应用程序并从那里获取它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      • 2016-10-26
      相关资源
      最近更新 更多