2012-07-16 3 views
8

Vorrei solo proteggere con password la directory root sul mio percorso di contesto per una Web App per Jetty. Il mio percorso contesto è/MyApp, quindi vorrei richiedere una password per l'accesso:Corrispondenza url-pattern molo solo directory root

http://localhost:8080/MyApp 

ma non per:

http://localhost:8080/MyApp/cometd 

Il mio attuale set up è al di sotto (prestare attenzione alla url-pattern):

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Private Page</web-resource-name> 
      <url-pattern>/</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>moderator</role-name> 
    </auth-constraint> 
</security-constraint> 

<login-config> 
    <auth-method>BASIC</auth-method> 
    <realm-name>Test Realm</realm-name> 
</login-config> 

mi aspetterei questo lavoro giusto per natura di come/e/* lavoro in generale. Ho visto anche questa risorsa che credo sia suggerendo che questo dovrebbe più o meno lavoro: http://www.coderanch.com/t/364782/Servlets/java/there-key-difference-between-url

Tuttavia, per il mio caso, i modelli url:

<url-pattern>/</url-pattern> 

e

<url-pattern>/*</url-pattern> 

sembra di agire esattamente lo stesso: entrambi

http://localhost:8080/MyApp 

e

http://localhost:8080/MyApp/cometd 

sono ENTRAMBI protetti da password.

Naturalmente, se cambio a/nothingishere, proprio come un test di sanità mentale, non è protetto da password, ad eccezione di/frontend/nothingishere

Qualcuno sa come proteggere solo la directory principale per i servlet web?

risposta

5

Ecco la risposta per voi:

<?xml version="1.0" encoding="UTF-8"?> 

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     version="3.0"> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>Private Page</web-resource-name> 
      <url-pattern>/</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>moderator</role-name> 
     </auth-constraint> 
    </security-constraint> 
    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>Public page</web-resource-name> 
      <url-pattern>/test/*</url-pattern> 
     </web-resource-collection>   
    </security-constraint> 
    <login-config> 
     <auth-method>BASIC</auth-method> 
     <realm-name>Test Realm</realm-name> 
    </login-config> 
</web-app> 

In questa configurazione, la directory principale è protetto da password e la directory /test/... non lo è. Penso che questo sia quello che stai chiedendo.

Questa configurazione viene testata su Tomcat 7+ e un nuovo progetto creato dall'inizio in NetBeans (posso inviarti l'intera fonte se necessario).

Questa è l'uscita: output

+0

Grazie, questo è _esattamente_ quello che stavo cercando. – Drewch

+0

Funziona anche per me :) Ti assegnerò una taglia non appena saranno trascorse le 24 ore. –

+1

ovviamente questa risposta non solo per il molo, ma per tutti i server Web compatibili con j2ee. Quindi potresti voler cambiare il titolo ... Btw, sono contento di aver aiutato – MaVRoSCy