java - spring mvc 将路径和所有子级重定向到另一个域

标签 java spring-mvc http-redirect

我正在尝试弄清楚如何从我的 web 应用程序重定向到另一台服务器,保留所有路径和 GET 变量。

例如

www.myapp.com/foo
foo.com

www.myapp.com/foo/bar
foo.com/bar

www.myapp.com/foo?bar=1
foo.com?bar=1

我理想情况下只是想使用类似的东西

<mvc:view-controller path="/foo/**" view-name="redirect:http://foo.com**" />

最佳答案

我最终使用了过滤器。

从基础结构上来说,这似乎是最简单的方法

过滤器实现:

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

关于java - spring mvc 将路径和所有子级重定向到另一个域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10568808/

相关文章:

java - 将 class.forName 创建的类作为参数传递

java - 为什么第二个查询抛出异常?

java - 使用 CORBA 时打印堆栈跟踪

spring - 如何使用 jquery ajax 将数组传递给 Spring Controller 方法

aws-api-gateway - CloudFront -> S3 用于在 ECS 中具有多个动态后端的静态或 API 网关

.htaccess - 将单页 http 重定向到 https

java单例实例化

java - Spring/Hibernate CRUD 不工作(MySQL)

java - spring如何管理ExceptionHandler的优先级?

php - 设置 2000 Http 重定向的最佳实践