2008-09-16 10 views
2

Ich versuche, die formularbasierte Authentifizierung innerhalb eines eingebetteten Jetty 6.1.7-Projekts zu verwenden.Embedded Jetty liefert statischen Inhalt mit Formularauthentifizierung

Deshalb muss ich servlets und html (login.html) unter dem gleichen Kontext dienen, Authentifizierung zu arbeiten. Ich möchte nicht die Loch-Anwendung sichern, da unterschiedliche Kontext unterschiedliche Rollen benötigen. Die Anlegestelle Javadoc gibt an, dass eine ContextHandlerCollection verschiedene Handler für einen Kontext behandeln kann, aber ich es nicht zum Funktionieren bringen. Mein Beispiel, das die Authentifizierung ignoriert, funktioniert nicht, warum?

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 

Jeder hilfreiche Gedanke ist willkommen!

Danke.

Okami

+0

Ich nehme an, du meintest Jetty 6.1.7 (nicht 1.6.7)? – jsight

Antwort

1

über die Web-Anwendung Descriptor:

diese zu Ihrem web.xml Einfügen in:

<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> 

Ohne Authentifizierung dies alles, aber die login.html verstecken.

+0

Danke, aber es muss eingebettet werden. Ich werde meine Frage verfeinern. – Okami

2

Endlich habe ich es richtig gemacht, Lösung ist die neueste Anlegestelle 6.1.12 RC2 zu verwenden. Ich habe nicht überprüft, was sie geändert haben - ich bin nur froh, dass es jetzt funktioniert.