gpt4 book ai didi

java - 使用spring mvc的多个域

转载 作者:IT老高 更新时间:2023-10-28 13:51:35 24 4
gpt4 key购买 nike

假设我有一个应用程序,它必须缩短 URL,但还要做其他事情。 (例如 google.comgoo.gl,或 facebook.comfb.me)。

简单地部署两个应用程序很容易,但(目前)只部署一个应用程序更简单。使用 spring 和 spring-mvc。我有以下映射:

@RequestMapping(value="/{shortUrlKey}", headers="Host=foo.br")
...
@RequestMapping(value="/{username}")

唉,headers 注释的作用不是提供更具体的信息,而是作为限制。因此,如果我有这两个,即使我以 http://foo.br/asdf 的形式打开它,也只会调用后者。如果只留下前者,它适用于那些来自 foo.br 的人,并且如果主机不同,则不会打开任何东西。

所以,问题:

  • 如何为相同的路径创建两个处理程序,但 URL/主机不同
  • 是否可以使用属性占位符配置器动态解析主机(而不是在注释中硬编码)

如果有一些用于方法解析的可插入机制,也许两者都可以工作。有这样的吗?

最佳答案

我的直接建议是编写一个 servlet 过滤器(或 Spring HandlerInterceptor),它将从请求中获取主机名,将其添加到原始请求路径,然后转发请求.

例如,给定请求的 URL http://goo.gl/my/path ,过滤器将转发到 /goo.gl/my/path。 Spring MVC 映射将有一些东西可以进入。 ant 样式的通配符语法(例如 "**/my/path")或路径变量样式(例如 "{requestHost}/my/path" 可能会有所帮助在那里。

或者,过滤器可以设置包含请求主机的自定义 header 或请求属性,但这可能不太灵活。

不过,我不确定你的问题的第二部分是什么意思。

这是一个工作片段:

@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {

if (request.getRequestURL().toString().contains(shortenerDomain)
&& !request.getRequestURI().startsWith(SHORT_URI_PREFIX)) {

request.getRequestDispatcher(SHORT_URI_PREFIX + request.getRequestURI())
.forward(request, response);
return false;
} else {
return true;
}
}

关于java - 使用spring mvc的多个域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4579484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com