播放框架更改路由文件onRouteRequest

时间:2016-01-05 13:47:20

标签: java playframework typesafe

我有3个路由文件,分别是web.route,admin.routes和swift.routes。每个路由文件都代表一个子域,应根据URI子域路径进行更改。 玩Java 请!

public Handler onRouteRequest(RequestHeader requestHeader) {
    String host = requestHeader.getHeader(Http.HeaderNames.HOST);
    Pattern pattern = Pattern.compile("^([a-z0-9]+)\\.([a-zA-Z0-9_%*:.]+)");
    Matcher matcher = pattern.matcher(host);
    if (matcher.matches()) {
        String subDomain = matcher.group(1);
        if (subDomain.equalsIgnoreCase("swift")) {
            //use swift routes file
        } else if(subdomain.equalsIgnoreCase("admin")) {
            //use the admin routes file
        } else {
            //use the web route for all other subdomain or non-subdomain
        }

    }
    return super.onRouteRequest(requestHeader);
}

我在网上看过很多关于这个问题的讨论,但没有一个足够详细,也许这就是游戏框架2.4我所见过的只有玩1和玩scala。我也理解通过SbtProject完成这项工作的最佳方法 https://www.playframework.com/documentation/2.2.x/SBTSubProjects 但是,我没有足够的经验来完成这种方法。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为你有两个问题。

第一个是如何使用mutliple路由文件而不实际使用子项目:它实际上非常简单,请看这个问题Play Framework: split routes in multiple files without sub projects。如您所见,您可以使用url前缀拆分路由文件。

第二个是如何在Play Framework中使用子域进行路由。 AFAIK,Play Framework 2.x不支持开箱即用的子域名。因此,subdomain1.mydomain.com/action/hellosubdomain2.mydomain.com/action/hello将得到平等对待。然而,你可以做的是一些网址重写。目标是将subdomain1.mydomain.com/action/hello转换为带前缀的URL,框架可以路由,例如mydomain.com/subdomain1/action/hello

我知道您可以使用支持网址重写的http服务器(如Nginx)来执行此操作(请参阅播放文档HTTP ServerUrl rewrite module)。但也许您可以使用onRouteRequest方法直接在Play中执行此操作。

我希望它有所帮助,欢呼。