의 구성으로 request.getServerName() 또는 request.getLocalAddr()에서 tomcat 응답을 조작 할 수 있습니까? 그렇다면 : 어떻게?server.xml
서버가 다른 하위 네트워크의 다른 IP로 알려져 있기 때문에이 설정이 필요합니다.
의 구성으로 request.getServerName() 또는 request.getLocalAddr()에서 tomcat 응답을 조작 할 수 있습니까? 그렇다면 : 어떻게?server.xml
서버가 다른 하위 네트워크의 다른 IP로 알려져 있기 때문에이 설정이 필요합니다.
내가 아는 한, web.xml에서 간단한 구성 변경만으로 ServletRequest.getServerName() 또는 ServletRequest.getLocalAddr()이 반환 한 값을 변경할 수 없습니다.
그러나 ServletRequest/HttpServletRequest 래퍼를 작성하여 비표준 값을 반환하려는 경우를 제외하고 모든 요청을 원래 요청에 위임 할 수 있습니다. 애플리케이션에 오는 모든 요청을 래핑하려면 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() { }
}
합니다.
다른 IP 또는 다른 호스트 이름에 의해서만? – Gandalf