gpt4 book ai didi

tomcat - 我可以通过 server.xml 中的配置操作 tomcats 对 request.getServerName() 或 request.getLocalAddr() 的回答吗

转载 作者:行者123 更新时间:2023-11-28 22:46:16 28 4
gpt4 key购买 nike

如果是这样:怎么做?

我需要这个,因为服务器在不同子网的不同 IP 下是已知的。

最佳答案

据我所知,不可能更改 ServletRequest.getServerName() 返回的值或 ServletRequest.getLocalAddr()只需在 web.xml 中进行简单的配置更改。

但是您可以编写一个 ServletRequest/HttpServletRequest 包装器,它只将所有方法调用委托(delegate)给原始请求,除了那些您想要返回非标准值的方法。要包装所有进入您的应用程序的请求,您可以实现 Filter ,它只是包装传入的请求,然后沿着过滤器链传递包装器。然后将在您的 web.xml 中配置过滤器。此过滤器之后的所有内容都将透明地使用您的包装器,并将获得您提供的自定义值。

包装器看起来像这样:

public class WrappedRequest implements ServletRequest {

private final ServletRequest original;

private String customServerName;

public WrappedRequest(ServletRequest original) {
this.original = original;
}

// ... delegate all method calls to original

public String getServerName() {
if (this.customServerName != null) {
return this.customServerName;
}
return this.original.getServerName();
}

public void setServerName(String customServerName) {
this.customServerName = customServerName;
}
}

过滤器:

public class RequestWrapperFilter implements Filter {

private final String serverName;

public void init(FilterConfig filterConfig) {
this.serverName = filterConfig.getInitParameter("serverName");
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
WrappedRequest wrapped = new WrappedRequest(request);
wrapper.setServerName(this.serverName);

chain.doFilter(wrapped, response);
}

public void destroy() { }
}

关于tomcat - 我可以通过 server.xml 中的配置操作 tomcats 对 request.getServerName() 或 request.getLocalAddr() 的回答吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1006616/

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