2014-07-25 23 views
5

Ich bin ein bisschen verwirrt mit URL-Muster im Frühjahr Sicherheit. Da in der Servlet-Core-HTTP-Sicherheit die URL-Muster / und /* für die Angabe eines oder mehrerer Verzeichnisse verwendet werden. / wird für ein Verzeichnis verwendet und /* wird von vielen Verzeichnissen verwendet. Aber im Frühjahr-Sicherheit, die /** wird auch eingeführt, was der Hauptzweck /** URL-Muster in Sicherheit ist.Spring-Security: Unterschied zwischen/** und/* URL-Muster in Spring-Security

Antwort

4

Laut Dokumentation Spring Security des Hauptzweck der /** ist Platzhalter-alle zu fangen:

In der Praxis empfehlen wir, dass Sie die Methode der Sicherheit an Ihrem Service-Layer verwenden, um den Zugriff auf Ihre Anwendung zu steuern und verlassen Sie sich nicht ausschließlich auf Sicherheitsbeschränkungen, die auf der Ebene der Webanwendung definiert sind. URLs ändern sich und es ist schwierig, alle möglichen URLs zu berücksichtigen, die eine Anwendung möglicherweise unterstützt, und , wie Anfragen manipuliert werden können. Sie sollten versuchen, und beschränken Sie sich auf die Verwendung ein paar einfache Ameisen Wege, die sind einfach zu verstehen. Versuchen Sie immer, einen "Deny-by-Default" -Ansatz zu verwenden, bei dem Sie den Catch-All-Platzhalter (/ ** oder **) als letzten definiert haben und den Zugriff verweigern.

Wir sollten auch nicht vergessen, dass

Muster werden in der Reihenfolge immer ausgewertet sie definiert sind. Daher ist es wichtig, dass spezifischere Muster in der Liste höher definiert sind als weniger spezifische Muster.

So können wir etwas davon haben:

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

, die für alle Anforderungen bedeutet, dass wir AUTH_SYSTEM_LOGIN Autorität brauchen, aber speziell für/Rest-Service/Bericht/export/xml der Benutzer müssen AUTH_REPORT_EXPORTXML-Berechtigung ebenfalls, weil sie oben definiert ist. Wie sie sagen auch ist es besser, nicht nur für diese Sicherheit Constraints verlassen, was bedeutet, dass es gut ist, auch so diejenigen, die in Service-Methoden mit gesicherter Anmerkung zu duplizieren:

@Secured("AUTH_REPORT_EXPORTXML") 

Im Allgemeinen, wie ich es verstehe, ist kein Unterschied zwischen /* und /** mit der Ausnahme, dass der letzte alle Wildcards abfängt.

9

Der Unterschied zwischen/* &/** ist, dass die zweite der gesamten Verzeichnisstruktur einschließlich der Unterverzeichnisse entspricht, wobei// nur auf der angegebenen Ebene übereinstimmt.

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

In dieser Konfiguration jeden "Get" Anfrage erlaubt werden, zum Beispiel:

  • /Buch
  • /Buch/20
  • /Buch/20/Autor

Also stimmen alle URLs Text mit Muster "/ **".

Zulässige Urls für "Beitrag":

  • /Buch
  • /Magazin

Urls über Spiel mit "/ *"

Verwandte Themen