2017-11-03 3 views
0

In JSP muss ich einen eingeschränkten Zugriff über Spring Security-Tags bereitstellen. Die Idee besteht darin, den Zugriff auf einen Benutzer mit der Rolle ADMIN oder auf einen Benutzer mit dem Namen principal.username zuzulassen, der dem Parameter 'email' des Modells entspricht. Das Tag sieht so aus:Spring-Sicherheits-Tags: Autorisieren Sie Zugriff auf mehrere Parameter

<sec:authorize access="(principal.username).equals(${user.email}) || hasRole('ADMIN')"> 

Aus unbekannten Gründen schlägt es fehl. Die Ausnahme:

org.springframework.expression.spel.SpelParseException: Expression [(principal.username).equals([email protected]) || hasRole('ADMIN')] @34: EL1043E: Unexpected token. Expected 'rparen())' but was 'bean_ref(@)' 

Ich verstehe nicht, warum SPEL schlägt fehl, weil in einem Controller eine ähnliche Regel ganz gut funktioniert:

@PreAuthorize("(principal.username).equals(#user.email) || hasRole('ADMIN')") 

Was soll ich im Tag ändern?

Antwort

0

Lösung ist etwas hässlich, aber es funktioniert

<sec:authorize access="isAuthenticated()"> 
     <sec:authentication property="principal.username" var="username"/> 
     <sec:authentication property="principal.authorities" var="auth"/> 
     <c:if test="${username.equals(user.email) || auth.iterator().next().toString().equals('ROLE_ADMIN')}"> 
Verwandte Themen