Я рассматриваю использование Аннотаций безопасности Spring для своего приложения с EL (язык выражения) функция. Например:
@PreAuthorize("hasPermission(#contact, 'admin')")
public void deletePermission(Contact contact, Sid recipient, Permission permission);
Мне нужна возможность EL, потому что я создал свою собственную реализацию ACL. Однако для использования этой возможности с "#contact" аргументами типа в документации Spring говорится это:
Можно получить доступ к любому из аргументов метода по имени как переменные выражения, предоставил код, скомпилировали отладочную информацию в.
Это вызывает два вопроса:
Спасибо за любое руководство на этом!
В качестве обходного пути вы можете реализовать собственный ParameterNameDiscoverer с вашей собственной стратегией. Вот пример, который производит простые пронумерованные имена ( arg0
и т. Д.):
public class SimpleParameterNameDiscoverer implements
ParameterNameDiscoverer {
public String[] getParameterNames(Method m) {
return getParameterNames(m.getParameterTypes().length);
}
public String[] getParameterNames(Constructor c) {
return getParameterNames(c.getParameterTypes().length);
}
protected String[] getParameterNames(int length) {
String[] names = new String[length];
for (int i = 0; i < length; i++)
names[i] = "arg" + i;
return names;
}
}
И конфигурация:
<global-method-security ...>
<expression-handler ref = "methodSecurityExpressionHandler" />
</global-method-security>
<beans:bean id = "methodSecurityExpressionHandler"
class = "org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
<beans:property name = "parameterNameDiscoverer">
<beans:bean class = "foo.bar.SimpleParameterNameDiscoverer" />
</beans:property>
</beans:bean>