Spring AOP: wie man in den Anmerkungen der Methode emfehlen
Ich würde gerne verwirklichen deklarative security mit Spring/AOP und Anmerkungen.
Wie sehen Sie in der nächsten code-Beispiel habe ich die Eingeschränkte Anmerkungen mit dem Parameter "allowedRoles" für die Definition, wer berechtigt ist, die zur Ausführung eines emfehlen Methode.
@Restricted(allowedRoles="jira-administrators")
public void setPassword(...) throws UserMgmtException {
//set password code
...
}
Nun, das problem ist, dass in meiner Beratung habe ich keinen Zugriff auf die vordefinierten meta-Annotationen:
public Object checkPermission(ProceedingJoinPoint pjp) throws Throwable {
Signature signature = pjp.getSignature();
System.out.println("Allowed:" + rolesAllowedForJoinPoint(pjp));
...
}
private Restricted rolesAllowedForJoinPoint(ProceedingJoinPoint thisJoinPoint)
{
MethodSignature methodSignature = (MethodSignature) thisJoinPoint.getSignature();
Method targetMethod = methodSignature.getMethod();
return targetMethod.getAnnotation(Restricted.class);
}
Die oben genannte Methode immer null zurück (es gibt keine Anmerkungen gefunden).
Gibt es da eine einfache Lösung?
Lese ich etwas über die Verwendung des AspectJ-agent, aber ich würde es vorziehen, diese nicht zu verwenden, agent.
InformationsquelleAutor der Frage hugri | 2010-04-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich gehe davon aus
@Restricted
ist Ihre Anmerkung. Wenn das der Fall ist, stellen Sie sicher, dass:in Ihre annotation-definition. Dies bedeutet, dass die Anmerkung ist beibehalten zur Laufzeit.
InformationsquelleAutor der Antwort Bozho
Ist, wer dann immer noch problem nach ändern annotation retention zur Laufzeit, die Sie möglicherweise das gleiche problem hatte ich auch: getMethod() liefert interface-Methode anstelle der implementierenden Klasse. Also, wenn Sie Ihre Anmerkungen in der Klasse dann natürlich getAnnotations() auf der interface-Methode gibt null zurück.
Folgende Lösung dieses problem gelöst:
und wenn Sie möchten, haben Sie die Möglichkeit, handling-Schnittstelle Anmerkungen auch hier.
Einige weitere Kommentare finden Sie hier:
erste template-Methode instance von ProceedingJoinPoint
Oleg
InformationsquelleAutor der Antwort Oleg
Sogar nach dem ändern der Aufbewahrungsrichtlinie wie Bozho erwähnt, diesem Ruf zu bekommen, Anmerkungen gibt null zurück:
Was ich fand, ist Sie zum binden der annotation. Angesichts der Schnittstelle deklariert ist, wie dies:
Den Rat hätte deklariert werden müssen, wie diese:
Was dieser tut, ist, binden Sie die Anmerkung, um die parameter in der Methodensignatur, restrictedAnnotation. Der Teil, den ich nicht sicher bin, ist, wie bekommt er den annotation-Typ, so scheint es zu sein, basierend auf dem parameter. Und sobald Sie die Anmerkung aus, die Sie bekommen können die Werte.
InformationsquelleAutor der Antwort Ryan K
Warum verwenden Sie nicht nur Spring Security ? Es ist eine kurze, zu implementieren und zu verwenden, sehe ich nicht wirklich den Punkt in Zeit zu verschwenden, das Rad neu erfinden.
InformationsquelleAutor der Antwort dakull
Mit Spring AOP, wenn Sie eine situation wie
MyManagerImpl implements MyManager
den pointcut wird angewendet, um dieinterface
Methode soMethodSignature
beschreibt die Methode definiert, aufMyManager
dass nicht jede Anmerkung. die einzige Möglichkeit die ich gefunden habe, um dies zu beheben, untersuchen Sie die Klasse derjp.getTarget()
- Objekt und ruft die entsprechende Methode.InformationsquelleAutor der Antwort LordEru