2013-02-22 16 views
33

Moja web.xml wygląda następująco:Jak wykluczyć jeden URL z upoważnienia

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>app</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>Role</role-name> 
    </auth-constraint> 
</security-constraint> 

to chronić każdą stronę od zezwoleń, ale chcę wykluczyć/info. Czy to możliwe ?

Odpowiedz

57

pominąć element w <security-constraint><auth-constraint> dla zasobów, dla których nie trzeba uwierzytelniania takich jak:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>app</web-resource-name> 
     <url-pattern>/info</url-pattern> 
    </web-resource-collection> 
    <!-- OMIT auth-constraint --> 
</security-constraint> 

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>app</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>Role</role-name> 
    </auth-constraint> 
</security-constraint> 
+0

Próbowałem tego podejścia i nie działało. Czy to jest ważne? – cherry

+3

/ścieżka nie działa dla mnie, natomiast /ścieżka/* działa dla wszystkich plików umieszczonych w katalogu/path. Również /ścieżka/mojafile.xhtml działa dla pojedynczego pliku, ale /ścieżka/*. Xhtml nie działa –

0

Rozwiązaniem jest użycie alternatywnego systemu bezpieczeństwa jak Apache Shiro zamiast bezpieczeństwa opartego pojemnika. Wtedy łatwo jest wykluczyć zasób z chronionej zawartości. Korzystanie Shiro będzie można umieścić w WEB-INF/shiro.ini:

[urls] 
/info = anon 
/** = authc 
0

nie wiem, czy ja ci rację! Przy mojej ograniczonej wiedzy uważam, że aby zaimplementować bezpieczeństwo, treść, która ma być zabezpieczona, deklarowana jest za pomocą jednego lub więcej elementów kolekcji zasobów internetowych. Każdy element kolekcji zasobów sieciowych zawiera opcjonalną serię elementów z wzorcem URL, a następnie opcjonalną serię elementów metody http. Wartość elementu wzorca adresu URL określa wzorzec adresu URL, pod którym adres URL żądania musi być zgodny, aby żądanie odpowiadało próbie uzyskania dostępu do zabezpieczonej treści. Wartość elementu metody http określa typ żądania HTTP do zezwolenia.

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Secure Content</web-resource-name> 
     <url-pattern>/restricted/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>AuthorizedUser</role-name> 
    </auth-constraint> 
    <user-data-constraint> 
     <transport-guarantee>NONE</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 
<!-- ... --> 
<login-config> 
    <auth-method>BASIC</auth-method> 
    <realm-name>The Restricted Zone</realm-name> 
</login-config> 
<!-- ... --> 
<security-role> 
    <description>The role required to access restricted content </description> 
    <role-name>AuthorizedUser</role-name> 
</security-role> 

URL leżący pod ścieżką aplikacji sieciowej/ograniczonej wymaga roli AuthorizedUser.

0

Próbowałem powyższy sposób wytłumaczyć @ user517491 ale mój Tomcat 7 filtruje cały ruch w/https, ale poprzedni Wyjątkiem jest ignorowany ...

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>app1</web-resource-name> 
     <url-pattern>/webservice/*</url-pattern> 
    </web-resource-collection> 
</security-constraint> 

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Protected Context</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

Jak mogę dodać wyjątek iść z http i wszystkich innych ruchu z https ???

Powiązane problemy