2012-08-01 19 views
5

Chciałbym stworzyć reguły bezpieczeństwa w oparciu o niestandardowe parametry adresu URL (zmienne ścieżki). W przykładzie. Powiedzmy, że chcę mieć użytkownika, który ma dostęp administratora do zasobów o nazwie Brand1 i Brand2, ale nie ma dostępu do zasobu o nazwie Brand3. Możemy edytować zasoby, korzystając z poniższych linków.Spring Security ze zmiennymi parametrami ścieżki

http://myapp/brand/edit/1 
http://myapp/brand/edit/2 
http://myapp/brand/edit/3 

teraz w kontekście zabezpieczeń chciałbym zrobić coś takiego

<security:intercept-url pattern="/brand/edit/{brandId}" 
      access="hasRole('ROLE_ADMIN') or 
        @authorizationService.hasBrandPermission(
        #brandId, principal.username)"/> 

Jedyne co mogę to nazwa użytkownika. BrandId ma zawsze wartość zerową. Kiedyś robiłem to przy pomocy @PreAuthorize i działało, ale teraz chciałbym scentralizować konfigurację bezpieczeństwa w pojedynczym pliku xml zamiast rozprowadzać go na wszystkich klasach kontrolerów. Co więcej, gdy używałam @PreAuthorize, mój handler z odmową dostępu nie przekierowywał mnie na stronę odmową, ale wyświetlał brzydki komunikat AccessDeniedException.

Naprawdę chciałbym pojąć wszelkie pomysły.

+0

Nie mam problemu. Czy to BrandId ma zawsze wartość zerową? A może to, że nie zabezpiecza zasobu? A może jest to brzydka strona AccessDeniedException? –

+0

BrandID ma wartość null –

Odpowiedz

1

możesz spróbować użyć wyrażenia regularnego.

trzeba będzie dodać ścieżki typu atrybut = „regex” w elemencie http lub request-dopasowujący = „regex” jeśli używane zabezpieczenia sprężyny 3.1

przejrzeć dokumentację po więcej szczegółów

+0

Chociaż to wyrażenie regularne służy tylko do definiowania wzorców adresów URL, a nie do wskazywania zmiennej ścieżki. tj. mogę zrobić coś takiego "/path /to/*.html", aby zastosować wszystkie adresy URL pasujące do wzorca, ale to, co mnie interesuje, to "/ path/to/resource/{resourceId}" i uzyskać wartość resourceId w ' sekcja dostępu, tzn. access = "@ myService.mySecurityMethod (#resourceId)" –

1

zmienić wersję Wiosna zabezpieczeń w pom.xml do 4.1.0.RELEASE:

<spring-security.version>4.1.0.RELEASE</spring-security.version> 

<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-web</artifactId> 
    <version>${spring-security.version}</version> 
</dependency> 

może trzeba oczyścić Twój projekt maven po tym.

(Wiem, to stare pytanie, ale stanąłem w obliczu tego samego problemu 3 lata później).

+0

Jak to jest związane z pytaniem? – tunix

Powiązane problemy