Du kannst Springs MethodSecurityExpressionRoot erweitern (und es in deinem eigenen MethodSecurityExpressionHandler erstellen) und eine eval-Methode hinzufügen, die einen String akzeptiert und den SpringExpressionParser den String auswerten lässt. Sollte funktionieren...
Bearbeitung:
Ein bisschen Code:
public class MySpringSecurityRoot extends MethodSecurityExpressionRoot {
private MyMethodSecurityExpressionHandler handler; // um es im Handler einzufügen
public boolean eval(String expression) {
Expression expression = handler.getExpressionParser().parseExpression(expression);
return ExpressionUtils.evaluateAsBoolean(
handler.getExpressionParser().parseExpression(expression),
handler.createEvaluationContext(authentification, methodInvocation));
}
}
Dein Handler muss als der Standard-Methodensicherheitsausdruckshandler festgelegt werden:
Jetzt ist deine eval-Funktion in jedem Methodensicherheitsausdruck zugänglich
ABER: Du musst dir darüber im Klaren sein, dass die Person, die deine Sicherheitsregel beschreibt, auf alle Beans im aktuellen Spring-Kontext zugreifen kann! Das könnte ein Sicherheitsrisiko sein.