2014-07-25 9 views
5

Jestem trochę mylący z wzorcem URL w ochronie wiosny. Ponieważ w zabezpieczeniach http rdzeni serwletu, wzorce adresów URL / i /* służą do określania jednego lub więcej katalogów. / jest używane dla jednego katalogu, a /* jest używane z wielu katalogów. Ale w okresie wiosennym bezpieczeństwo wprowadzono także kod /**, który jest głównym celem wzorców adresów URL w zabezpieczeniach.Bezpieczeństwo wiosenne: Różnica między/** i/* adresem URL w Spring-Security

Odpowiedz

4

Według dokumentacji Wiosna Bezpieczeństwa głównym celem /** jest złapać-wszystkie symbole wieloznaczne:

W praktyce zaleca się, aby używać bezpieczeństwo metody w swojej warstwie usług, aby kontrolować dostęp do aplikacji i nie polegaj wyłącznie na ograniczeniach bezpieczeństwa zdefiniowanych na poziomie aplikacji WWW. Adresy URL ulegają zmianie i trudno jest uwzględnić wszystkie możliwe adresy URL, które może obsługiwać aplikacja, oraz sposób manipulowania żądaniami. Powinieneś spróbować ograniczyć się do korzystania z kilku prostych ścieżek do mrówek, które są łatwe do zrozumienia. Zawsze staraj się używać podejścia "odrzuć domyślnie", w którym jest zdefiniowany symbol wieloznaczny (/ ** lub **) i odmowa dostępu.

My również nie należy zapominać, że

Wzorce są zawsze oceniane w kolejności są zdefiniowane. Dlatego ważne jest, aby bardziej szczegółowe wzorce zostały zdefiniowane wyżej na liście niż mniej specyficzne wzory.

W ten sposób możemy mieć coś takiego:

<security:http pattern="/rest-service/**" authentication-manager-ref="authenticationManager" auto-config="false" access-decision-manager-ref="accessDecisionManager"> 
    <security:intercept-url pattern="/rest-service/report/export/xml" access="AUTH_REPORT_EXPORTXML" />   
    <security:intercept-url pattern="/**" access="AUTH_SYSTEM_LOGIN" /> 
    <security:http-basic /> 
</security:http> 

co oznacza, że ​​dla wszystkich żądań musimy władzę AUTH_SYSTEM_LOGIN, ale specjalnie dla/Rest-usługi/raport/export/xml użytkownik będzie musiał Uprawnienie AUTH_REPORT_EXPORTXML, ponieważ jest zdefiniowane powyżej. Jak oni też mówią, że lepiej nie polegać tylko na tym więzów bezpieczeństwa, co oznacza, że ​​jest ona dobra również powielać tych metod usługowych z zabezpieczonej adnotacją jak ten:

@Secured("AUTH_REPORT_EXPORTXML") 

W ogóle, jak rozumiem, nie ma różnicy między /* i /** z tą różnicą, że ostatnia przechwytuje wszystkie symbole wieloznaczne.

9

Różnica między/* &/** jest taka, że ​​druga dopasowuje całe drzewo katalogów, w tym podkatalogi, gdzie tylko/* pasuje tylko na poziomie określonym w.

0
@Override 
    protected void configure(HttpSecurity http) throws Exception { 
    // ... 
    .antMatchers(HttpMethod.GET, "/**").permitAll 
    .antMatchers(HttpMethod.POST, "/*").permitAll 
    // ... 
} 

W tej konfiguracji każdy "Get" zapytanie będzie dozwolone, na przykład:

  • /książka
  • /książka/20
  • /książka/20/autor

Wszystkie te adresy URL dopasowują tekst do wzorca "/ **".

Dozwolone adresy URL dla "Napisz":

  • /rezerwacja
  • /Magazyn

Urls powyżej meczu z "/ *"

Powiązane problemy