Die akzeptierte Antwort von Kevin Bowersox funktioniert, aber ich mochte nicht die T (vollqualifizierten.Pfad) Sachen, also schaute ich weiter. Ich begann mit einer benutzerdefinierten Sicherheitsmethode zu schaffen, die Antwort von James Watkins mit hier:
How to create custom methods for use in spring security expression language annotations
jedoch anstelle eines String, habe ich meine enums.Permissions Klasse, die als Parametertyp:
@Component
public class MySecurityService {
public boolean hasPermission(enums.Permissions permission) {
...do some work here...
return true;
}
}
Nun ist der ordentlich Teil ist, dass, wenn ich die hasPermission von einer Anmerkung nennen, muß ich den ganzen Weg nicht eingeben müssen, aber ich habe es in einfachen Anführungszeichen:
@PreAuthorize("@mySecurityService.hasPermission('SOME_ROLE_NAME')")
Da die Methode "hasPermission" eine Enum erwartet, wird automatisch der Enum-Wert mit diesem Namen gefunden. Wenn es es nicht finden Sie eine Ausnahme erhalten:
org.springframework.expression.spel.SpelEvaluationException: Type conversion problem, cannot convert from java.lang.String to enums.Permissions
Sie hasPermission zu hasRole umbenennen können, wobei in diesem Fall der einzige Kompromiss ist, dass Sie handeln T (fully.qualified.path) für @mySecurityService und zusätzliche einfache Anführungszeichen.
Nicht sicher, ob es besser ist, aber da ist es. Da nichts davon die Werte zur Kompilierzeit verifizieren wird, besteht mein nächster Schritt darin, einen Annotationsprozessor zu erstellen.
Ich muss auch Kredit, dass der Frühling für den Hinweis auf krosenvold geben kann zu einem Enum automatisch konvertieren: https://stackoverflow.com/a/516899/618881
großen Werke, danke! – RobEarl
@RobEarl Awesome froh, ich könnte helfen. Ich habe auch etwas gelernt. –
Works, aber es ist immer noch eine interpretierte Zeichenfolge, so dass es von Eclipse nicht "gesehen" wird, wenn Sie z. der Name, denke ich. – yglodt