Java 以编程方式更改ServletRequest服务器名称
我需要更改Grails控制器中Java 以编程方式更改ServletRequest服务器名称,java,spring,grails,Java,Spring,Grails,我需要更改Grails控制器中ServletRequest对象的服务器名。由于服务器名是只读属性,我很难弄清楚如何执行此操作。最正确的做法可能是设置一个聪明的过滤器或重定向,在servlet参与之前“修复”您的请求URL。我不知道该怎么做;如果你想那样做,你应该问下去 在java中,您可以通过创建自己的HttpServletRequestWrapper子类来伪造它,该子类提供setServerName()并覆盖getServerName(),同时将所有其他方法委托给超类。然后,您可以提供一个过滤
ServletRequest
对象的服务器名。由于服务器名是只读属性,我很难弄清楚如何执行此操作。最正确的做法可能是设置一个聪明的过滤器或重定向,在servlet参与之前“修复”您的请求URL。我不知道该怎么做;如果你想那样做,你应该问下去
在java中,您可以通过创建自己的HttpServletRequestWrapper
子类来伪造它,该子类提供setServerName()
并覆盖getServerName()
,同时将所有其他方法委托给超类。然后,您可以提供一个过滤器,该过滤器创建您的请求的一个实例,并将该实例发送到整个链中
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
YourHttpServletRequest yourRequest =
new YourHttpServletRequest(request, newServerName);
chain.doFilter(yourRequest, response);
}
如果我理解正确,CORS过滤器可能会有所帮助 我在以前的项目中使用过
但是您也可以在github上查找,例如我指的是
HttpRequest
的serverName
。我曾尝试创建自己的HttpRequest
,但我认为这不可取,因为我不是专家,可能弊大于利。也许我应该说ServletRequest
接口的getServerName?我需要获取该服务器名称,因为我的应用程序是一个多租户应用程序,我需要以编程方式更改服务器名称,以便以编程方式切换租户。如果有人知道如何修复传入的URL解决方案,请随时更新答案。谢谢。我会尝试一下,如果可行的话,我会接受的。还将询问serverfault。您知道如何向web.xml添加筛选器吗?如果你愿意,我可以更新答案。我曾考虑过添加一个过滤器,但我不知道该如何更改服务器名。谢谢你的帮助,伙计。很遗憾。我无法使用它,因为我无法更改grails中的请求
对象。无论如何,谢谢你的帮助,伙计。很遗憾,这对我也不起作用。我已经可以向其他服务器发送请求了。在发送请求之前,我只需要访问该服务器的SecurityContextHolder或更改服务器名称。我仍然不知道如何使用CORS过滤器。