Аннотации безопасности Spring с EL — требуют отладочной информации, скомпилированной в?

Я рассматриваю использование Аннотаций безопасности Spring для своего приложения с EL (язык выражения) функция. Например:

@PreAuthorize("hasPermission(#contact, 'admin')")
public void deletePermission(Contact contact, Sid recipient, Permission permission);

Мне нужна возможность EL, потому что я создал свою собственную реализацию ACL. Однако для использования этой возможности с "#contact" аргументами типа в документации Spring говорится это:

Можно получить доступ к любому из аргументов метода по имени как переменные выражения, предоставил код, скомпилировали отладочную информацию в.

Это вызывает два вопроса:

  1. Приемлемо распределить производственное приложение коммерчески с информацией об отладке в нем?
  2. В противном случае есть ли какой-либо путь вокруг этого?

Спасибо за любое руководство на этом!

6
задан axtavt 25 May 2010 в 16:14
поделиться

1 ответ

В качестве обходного пути вы можете реализовать собственный 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>
9
ответ дан 9 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: