Автологин во время разработки с Jetty - PullRequest
0 голосов
/ 30 марта 2011

У меня обычная настройка: веб-приложение с экраном входа в систему и небольшим Java-классом, который настраивает Jetty для запуска приложения.

Во время разработки мы все тратим пару секунд, чтобы войти в систему после каждогоперейти на код, который вызывает перезапуск.(Нет, JRebel не помогает, поскольку он не запускает конструкторы снова, поэтому может пропустить некоторые изменения).

Поэтому мне было интересно, смогу ли я исправить такую ​​настройку Jetty таким образомспособ:

Если я запрашиваю /index.jsp, вместо перехода к реальному JSP, он должен загрузить сервлет, который заполняет имя пользователя и пароль типичного пользователя разработки, регистрирует его, а затем перенаправляет наосновной JSP приложения.

Чтобы все было безопасно, я добавлю этот код автоматического входа в систему в тестовый путь, чтобы его нельзя было случайно развернуть.

Теперь вопрос: Как настроить перенаправление / перезапись URL в Jetty из кода Java?По понятным причинам я не хочу касаться web.xml.

1 Ответ

0 голосов
/ 05 апреля 2011

Следуя примерам, я придумал следующий код:

private WebAppContext webapp;

private void configureAutoLogin() {
    ServletHolder holder = webapp.getServletHandler().newServletHolder();
    holder.setName("autologin");
    holder.setClassName( AutoLoginServlet.class.getName() );

    webapp.getServletHandler().addServlet(holder);

    ServletMapping mapping = new ServletMapping();
    mapping.setServletName(holder.getName());
    String[] paths = { "/autologin" };
    mapping.setPathSpecs( paths );

    webapp.getServletHandler().addServletMapping(mapping);
}

Чтобы сделать его более простым для пользователей, я также создал каталог jetty/, который содержит test.html, куда разработчики могут добавлятьссылки на такие URL.Чтобы убедиться, что эта тестовая HTML-страница не может быть развернута случайно, я добавляю каталог jetty/ в базовый ресурс WebAppContext:

    File webAppDir = new File( "src/main/webapp" );
    Resource webAppResource = new FileResource( webAppDir.toURI().toURL() );
    Resource jettyDir = new FileResource( new File( "jetty" ).toURI().toURL() );

    ResourceCollection resources = new ResourceCollection( webAppResource, jettyDir );
    webapp.setBaseResource( resources );
...