2012-07-16 11 views
8

Me gustaría proteger solo con contraseña el directorio raíz en mi ruta de contexto para Jetty WebApp. Mi ruta de contexto es/MiApl, así que me gustaría para requerir una contraseña para acceder a:Match jetty url-pattern solo en el directorio raíz

http://localhost:8080/MyApp 

pero no para:

http://localhost:8080/MyApp/cometd 

Mi configuración actual está por debajo (prestar atención a la 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> 

Espero que esto funcione solo por la naturaleza de cómo/y/* trabajo en general. También he visto este recurso que creo que es lo que sugiere que esto debería más o menos trabajo: http://www.coderanch.com/t/364782/Servlets/java/there-key-difference-between-url

Sin embargo, para mi caso, los patrones de URL:

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

y

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

parece para actuar exactamente igual: ambos

http://localhost:8080/MyApp 

y

http://localhost:8080/MyApp/cometd 

están ambos protegidos con contraseña.

Por supuesto, si cambio a/nothingishere, así como una prueba de cordura, no está protegido con contraseña, a excepción de/MyApp/nothingishere

¿Alguien sabe cómo sólo para proteger el directorio raíz para los servlets web?

Respuesta

5

Aquí está la respuesta para usted:

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

En esta configuración, el directorio raíz está protegido por contraseña y el directorio /test/... no lo es. Creo que esto es lo que estás pidiendo.

Esta configuración ha sido probada en Tomcat 7+ y en un nuevo proyecto creado desde el principio en NetBeans (puedo enviarle un correo electrónico a toda la fuente si la necesita).

Ésta es la salida: output

+0

Gracias, esto es _exactly_ lo que estaba buscando. – Drewch

+0

Funciona para mí también :) Voy a otorgar recompensa tan pronto como se cumplan las 24 horas. –

+1

por supuesto esta respuesta no solo para embarcadero, sino también para todos los servidores web compatibles con j2ee. Por lo tanto, es posible que desee cambiar el encabezado ... Por cierto, me alegro de haber ayudado – MaVRoSCy

Cuestiones relacionadas