Ich versuche, das "ROLE_" Präfix in Spring Security zu entfernen. Das erste, was ich versuchte, war:Wie entferne ich das Präfix ROLE_ von Spring Security mit JavaConfig?
http.servletApi().rolePrefix("");
, die nicht funktioniert, so dass ich versuchte, einen BeanPostProcessor
zu schaffen, wie in http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html#m3to4-role-prefixing-disable vorgeschlagen. Das hat auch nicht funktioniert.
Schließlich habe ich versucht, meine eigene Schaffung SecurityExpressionHandler
:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.expressionHandler(webExpressionHandler())
.antMatchers("/restricted").fullyAuthenticated()
.antMatchers("/foo").hasRole("mycustomrolename")
.antMatchers("/**").permitAll();
}
private SecurityExpressionHandler<FilterInvocation> webExpressionHandler() {
DefaultWebSecurityExpressionHandler defaultWebSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler();
defaultWebSecurityExpressionHandler.setDefaultRolePrefix("");
return defaultWebSecurityExpressionHandler;
}
Doch dies funktioniert auch nicht. Wenn ich "hasAuthority (roleName)" anstelle von hasRole
verwende, funktioniert es wie erwartet.
Ist es möglich, das ROLE_-Präfix aus der hasRole-Prüfung von Spring Security zu entfernen?
Seltsam das 'BeanPostProcessor' funktioniert für mich (Sie es als eine Methode' static' Bohne tat erklären und enthalten die 'PriorityOrdered' so, dass es sehr früh läuft?) Und das gleiche gilt für die Expression Handler. Wir haben auch einen 'DefaultMethodSecurityExpressionHandler'DefaultMethodSecurityExpressionHandler', der mit dem Präfix'NULL' konfiguriert ist. –
Ja, ich habe den Code für den 'BeanPostProcessor' direkt aus der Dokumentation kopiert. Ich habe versucht, die @ Bean in meiner '@ Configuration' Klasse für Spring Security und in meiner' @ SpringBootApplication' Klasse zu platzieren. Ich habe ein 'System.out.println' hinzugefügt, um sicherzustellen, dass es auch vor Spring Security konfiguriert wird. 'hasAuthority' funktioniert wie erwartet, also schätze ich, dass ich das stattdessen benutze. –
Wir haben es in einer Nicht-Spring-Boot-Anwendung.Könnte es sein, dass das stört oder dass die Sicherheit des Bootes irgendwie noch früher konfiguriert ist? –