Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式更改ServletRequest服务器名称_Java_Spring_Grails - Fatal编程技术网

Java 以编程方式更改ServletRequest服务器名称

Java 以编程方式更改ServletRequest服务器名称,java,spring,grails,Java,Spring,Grails,我需要更改Grails控制器中ServletRequest对象的服务器名。由于服务器名是只读属性,我很难弄清楚如何执行此操作。最正确的做法可能是设置一个聪明的过滤器或重定向,在servlet参与之前“修复”您的请求URL。我不知道该怎么做;如果你想那样做,你应该问下去 在java中,您可以通过创建自己的HttpServletRequestWrapper子类来伪造它,该子类提供setServerName()并覆盖getServerName(),同时将所有其他方法委托给超类。然后,您可以提供一个过滤

我需要更改Grails控制器中
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过滤器。