Play Framework Изменить файл маршрута onRouteRequest

У меня есть 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);
}

Я видел множество вопросов в Интернете, в которых обсуждалось это, но ни один из них не был достаточно подробным, и, возможно, это play framework 2.4, все, что я видел, это play 1 и play scala. Я также понимаю, что лучший способ сделать это — через SbtProject https://www.playframework.com/documentation/2.2.x/SBTSubProjects Однако я не могу позволить себе такую ​​роскошь. Любая помощь будет оценена.


person Igbalajobi Jamiu    schedule 05.01.2016    source источник


Ответы (1)


Я думаю, что у вас есть две проблемы здесь.

Во-первых, как можно использовать несколько файлов маршрутов без фактического использования подпроектов: на самом деле это очень просто, см. этот вопрос Play Framework: разделите маршруты на несколько файлов без подпроектов. Как видите, вы можете разделить файл маршрута, используя префикс URL.

Второй — как можно использовать субдомены в Play Framework для целей маршрутизации. Насколько я знаю, Play Framework 2.x не поддерживает поддомены из коробки. Таким образом, subdomain1.mydomain.com/action/hello и subdomain2.mydomain.com/action/hello будут рассматриваться одинаково. Однако вы можете немного переписать URL. Цель состоит в том, чтобы преобразовать subdomain1.mydomain.com/action/hello в URL-адрес с префиксом, что-то, что фреймворк может маршрутизировать, например mydomain.com/subdomain1/action/hello.

Я знаю, что вы можете сделать это, используя http-сервер, который поддерживает перезапись URL-адресов, например Nginx (см. документацию по Play HTTP-сервер и модуль перезаписи URL) . Но, возможно, вы можете сделать это прямо в Play в своем методе onRouteRequest.

Я надеюсь, что это поможет, ура.

person Benoit Coudour    schedule 06.01.2016