2016-07-13 27 views
0

Ich habe gefragt relative question über hasAuthority() und hasRole() und this part is clear. Ich habe versucht, meine Anwendung mit group authorities zu konfigurieren. Konfiguration funktioniert für mich, wenn ich Anweisung verwenden .hasAuthority ("ADMIN")Frühling Sicherheit jdbcauthentication Behörden über Gruppen

http 
    .antMatcher("/monitor/console/**") 
    .authorizeRequests() 
    .antMatchers("/monitor/console/**") 
    .hasAuthority("ADMIN") 
    .... // other unimportant java code.. 

Aber wenn ich ändern Sie ihn auf .hasRole ("ADMIN") oder .hasRole ("ROLE_ADMIN") Einschränkung funktioniert nicht. Ich kann Benutzerdaten in der Anmeldung in JdbcDaoImpl Dienst geladen überprüfen, und ich kann Berechtigungsliste damit verbunden sehen, aber ich weiß nicht, warum hasRole (..) funktioniert nicht. Ich hoffe, dass jemand weiß, wo ich meinen Haltepunkt verwenden muss, um den Zustand von Objekten zu überprüfen und das Ergebnis zu vergleichen oder wie es behoben werden kann.

Ich bin wirklich verwirrt, weil die Beschränkungen richtig funktioniert, wenn ich einzelne Behörden Tisch ...

Antwort

0

Im Frühjahr wurde unter Verwendung eine Rolle, die die gleiche ist wie eine Autorität ist. Vor Spring Security 4 wurden beide auf die gleiche Weise behandelt. Die Methode hasAuthority() hat intern nur die Methode hasRole() aufgerufen.

Jetzt mit Spring Security 4, hat die Methode hasRole() dem Namen der Rolle das Präfix ROLE_ hinzugefügt, daher ist hasAuthority ('ROLE_ADMIN') dasselbe wie hasRole ('ADMIN'), weil das Präfix ROLE_ hinzugefügt wird automatisch.

Sie können mehr hier sehen. http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html#m3to4-role-prefixing

In Ihrem Fall, ich denke, Sie müssen das Präfix ROLE_ zu Ihren Rollen in Ihrer Datenbank hinzufügen o in dem Moment, in dem Sie die Rollen laden.

+0

ich verstehe Ihren Standpunkt nicht, sorry. Was ist der Grund, wenn meine ** hasAuthority (...) ** korrekt funktioniert, aber ** hasRole (...) ** beschädigt ist? – Sergii

+0

Auch wenn Sie an _ROLE__ Präfix Regel glauben, bitte beachten Sie zwei Fälle: 1. Ich kenne diese Regel (siehe Frage Beschreibung). 2. Ich habe [ein altes Problem] (https://github.com/spring-projects/spring-security/issues/2726), aber keine Lösung. Mein Rollenpräfix wird mit "" überschrieben. – Sergii

+0

Der Punkt ist, die Methode hasRole() fügt das Präfix ROLE_ zum rolename receive als Parameter hinzu. Ihre aktuelle Autorität ist ADMIN. Wenn Sie also hasRole ("ADMIN") aufrufen, wird nach ROLE_ADMIN gesucht, und diese existiert nicht (nur ADMIN und nicht ROLE_ADMIN). Dasselbe gilt für den Aufruf von hasRole ("ROLE_ADMIN"). Ich denke, dass Sie den Namen der Autorität zu ROLE_ADMIN anstelle von ADMIN ändern müssen, wenn Sie hasRole ("ADMIN") aufrufen, sucht es nach ROLE_ADMIN. – reos