Я закончил с использованием фильтра.
инфраструктурно это, кажется, самый простой способ
реализация фильтра:
public class DomainRedirectFilter extends OncePerRequestFilter {
private String destinationDomain;
private String sourceServletPath;
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String path = request.getServletPath();
path = StringUtils.replace(path, getSourceServletPath(), "");
if (request.getQueryString() != null) {
path += '?' + request.getQueryString();
}
response.setHeader("Location", getDestinationDomain() + path);
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Connection", "close");
}
web.xml
<filter>
<filter-name>fooDomainRedirectFilter</filter-name>
<filter-class>com.abc.mvc.util.DomainRedirectFilter</filter-class>
<init-param>
<param-name>destinationDomain</param-name>
<param-value>http://foo.abc.com</param-value>
</init-param>
<init-param>
<param-name>sourceServletPath</param-name>
<param-value>/foo</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>fooDomainRedirectFilter</filter-name>
<url-pattern>/foo/*</url-pattern>
<url-pattern>/foo</url-pattern>
</filter-mapping>
мне нужно добавить 2 URL-шаблоны, чтобы позволить
/foo
/foo?id=1
/foo/bar
/foo/bar?id=1
В идеале мы не хотим привлекать apache httpd в этом уравнении – kabal
Я не верю, что есть способ сделать это с помощью только Spring MVC, так как все Spring MVC предоставляет веб-фреймворк для сервлетов. Что-то нужно было сделать на уровне контейнера сервлетов (т. Е. Tomcat, или Apache перенаправляет Tomcat через прокси). – dardo