Встроенный Jetty, обслуживающий статический контент с аутентификацией формы

Я пытаюсь использовать аутентификацию на основе форм во встроенном проекте Jetty 6.1.7.

Вот почему мне нужно обслуживать сервлеты и html (login.html) в одном контексте, чтобы аутентификация работала. Я не хочу защищать дырочное приложение, поскольку для разных контекстов нужны разные роли. В javadoc причала указано, что ContextHandlerCollection может обрабатывать разные обработчики для одного контекста, но я не заставляю его работать. Мой пример, игнорирующий аутентификацию, не будет работать, почему?

ContextHandlerCollection contexts = new ContextHandlerCollection();

// serve html       
Context ctxADocs= new Context(contexts,"/ctxA",Context.SESSIONS);
ctxADocs.setResourceBase("d:\\tmp\\ctxA");
ServletHolder ctxADocHolder= new ServletHolder();
ctxADocHolder.setInitParameter("dirAllowed", "false");    
ctxADocHolder.setServlet(new DefaultServlet());
ctxADocs.addServlet(ctxADocHolder, "/");   

// serve a sample servlet
Context ctxA = new Context(contexts,"/ctxA",Context.SESSIONS);  

ctxA.addServlet(new ServletHolder(new SessionDump()), "/sda");
ctxA.addServlet(new ServletHolder(new DefaultServlet()), "/");

contexts.setHandlers(new Handler[]{ctxA, ctxADocs});

// end of snippet

Любая полезная мысль приветствуется!

Спасибо.

Оками


person Okami    schedule 16.09.2008    source источник
comment
Я предполагаю, что вы имели в виду Jetty 6.1.7 (не 1.6.7)?   -  person jsight    schedule 16.09.2008


Ответы (2)


Наконец я понял это правильно, решение состоит в том, чтобы использовать последнюю версию причала 6.1.12 rc2. Я не проверял, что они изменили - я просто счастлив, что теперь это работает.

person Okami    schedule 22.09.2008

Используйте дескриптор веб-приложения:

Вставьте это в свой web.xml:

<login-config>
    <auth-method>BASIC</auth-method>
</login-config>
<security-role>
    <role-name>MySiteRole</role-name>
</security-role>

<security-constraint>
    <display-name>ProtectEverything</display-name>
    <web-resource-collection>
        <web-resource-name>ProtectEverything</web-resource-name>
        <url-pattern>*.*</url-pattern>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>MySiteRole</role-name>
    </auth-constraint>
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>ExcludeLoginPage</web-resource-name>
        <url-pattern>/login.html</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

Без аутентификации это скроет все, кроме login.html.

person Eduard Wirch    schedule 18.09.2008
comment
Спасибо, но это должно быть встроено. Я уточню свой вопрос. - person Okami; 19.09.2008