我需要在Grails Controller 中更改ServletRequest
对象的serverName。由于serverName是只读属性,因此我很难弄清楚该怎么做。
最佳答案
最正确的做法可能是设置一个聪明的过滤器或重定向,甚至在您的servlet介入之前,它就可以“修复”您的请求URL。我不知道该怎么做。您应该在serverfault.com上询问是否要这样做。
在Java中,您可以通过创建自己的HttpServletRequestWrapper
子类来伪造它,该子类提供setServerName()
并覆盖getServerName()
,同时将所有其他方法委托(delegate)给父类(super class)。然后,您可以提供一个过滤器,该过滤器创建您的请求的一个实例并将其发送到链下。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
YourHttpServletRequest yourRequest =
new YourHttpServletRequest(request, newServerName);
chain.doFilter(yourRequest, response);
}
关于java - 以编程方式更改ServletRequest服务器名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23772932/