Obecnie korzystam z usługi sieciowej obsługującej podstawowe uwierzytelnianie przez Tomcat. Okno logowania wyskakuje dobrze i mogę zalogować się na konta, które zdefiniowałem w pliku tomcat-users.xml. Jednak jeśli chodzi o definiowanie uprawnień na podstawie ról, mam pewne problemy.

Obecnie pełnię trzy role: menedżera, administratora i użytkownika. Mam kilka metod, do których dostęp powinien mieć, powiedzmy, administrator. Mogę zalogować się jako moje superkonto menedżera/administratora/użytkownika i widzieć wszystko w porządku, ale mogę też zrobić to samo, co normalny użytkownik.

Metody są zdefiniowane w następujący sposób:

@Path("/Test")
@RolesAllowed("admin")
public class Test
{
    @GET
    @RolesAllowed("user")
    public methodThatMyUsersCanAcess{}

    @GET
    @Path("/Secure")
    @RolesAllowed("admin")
    public methodThatOnlyAdminsCanAcess{}
}

Naprawdę nie jestem pewien, w jaki sposób rola „użytkownika” mogłaby uzyskać dostęp do drugiej metody, ale jakoś tak się dzieje.

2
ZKSteffel 1 czerwiec 2011, 00:56
Tak więc, żeby było jasne, wygląda na to, że zasoby /Test są mapowane do methodTheMyUsersCanAccess i powinny być dostępne tylko dla roli user, a /Test/Secure mapuje do methodThatOnlyAdminsCanAccess i jest dostępny tylko dla roli admin. Adnotacja @RolesAllowed pochodzi z JSR 250, która stwierdza, że ​​jej użycie w metodzie powinno przesłonić jej użycie na poziomie klasy. Co się stanie, gdy usuniesz adnotację @RolesAllowed z poziomu zajęć?
 – 
stand
1 czerwiec 2011, 05:09
Nadal robi to samo. Zalogowany jako „użytkownik”, nadal mam dostęp do metody „admin”.
 – 
ZKSteffel
2 czerwiec 2011, 17:21

2 odpowiedzi

Najlepsza odpowiedź

Po dalszych badaniach odkryłem, że używanie @RolesAllowed nic nie robi w moim kodzie ze względu na sposób konfiguracji mojego pliku web.xml. Postanowiłem pójść w kierunku ustawiania uwierzytelniania po ścieżce URI. Odbywa się to poprzez modyfikację pliku web.xml, aby umożliwić podzbiorowi użytkowników dostęp do każdej ścieżki pod osobnymi znacznikami <security-constraint>. Najlepsze źródło informacji znalazłem tutaj: http://www.coderanch.com/t/176095/java-Web-Component-SCWCD/certification/auth-constraint-confusion w drugim poście.

1
ZKSteffel 2 czerwiec 2011, 18:29

Kluczowym punktem jest skonfigurowanie RolesAllowedResourceFilterFactory w web.xml, jak poniżej:

<servlet> 
    <servlet-name>jersey-servlet</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
        <init-param> 
            <param-name>com.sun.jersey.config.property.packages</param-name> 
            <param-value>com.mycompany.mobile.rest</param-value> 
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.config.feature.Trace</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
            <param-value>com.mycompany.mobile.rest.filter.RestSecurityFilter</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
            <param-value>com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory</param-value>
        </init-param>
    <load-on-startup>1</load-on-startup> 
</servlet> 
0
keyser 28 październik 2012, 19:07