Debugging 带EL的Spring安全注释--需要在中编译调试信息?

Debugging 带EL的Spring安全注释--需要在中编译调试信息?,debugging,spring-security,acl,Debugging,Spring Security,Acl,我正在考虑为我的应用程序使用Spring安全注释,并带有EL(表达式语言)特性。例如: @PreAuthorize("hasPermission(#contact, 'admin')") public void deletePermission(Contact contact, Sid recipient, Permission permission); 我需要EL功能,因为我已经构建了自己的ACL实现。但是,要将此功能与“#contact”类型参数一起使用,Spring文档说明如下: 您可以

我正在考虑为我的应用程序使用Spring安全注释,并带有EL(表达式语言)特性。例如:

@PreAuthorize("hasPermission(#contact, 'admin')")
public void deletePermission(Contact contact, Sid recipient, Permission permission);
我需要EL功能,因为我已经构建了自己的ACL实现。但是,要将此功能与“#contact”类型参数一起使用,Spring文档说明如下:

您可以访问任何方法 以名称作为表达式的参数 变量,前提是您的代码 在中编译的调试信息

这就引出了两个问题:

  • 可以接受有一个 生产应用商业化 是否分发了调试信息
  • 如果没有,有什么办法吗 这个

  • 谢谢你的指导

    作为一种解决方法,您可以使用自己的策略实施自定义。下面是一个生成简单编号名称(
    arg0
    等)的示例:

    公共类SimpleParameterNameDiscoveryr实现
    参数发现者{
    公共字符串[]getParameterNames(方法m){
    返回getParameterNames(m.getParameterTypes().length);
    }
    公共字符串[]getParameterNames(构造函数c){
    返回getParameterNames(c.getParameterTypes().length);
    }
    受保护字符串[]getParameterNames(整数长度){
    字符串[]名称=新字符串[长度];
    for(int i=0;i
    和配置:

    <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>
    
    
    
    我现在找不到参考,但您可能有兴趣知道Java 8将始终包含参数名,即使我相信Java 8将始终包含参数名,即使在调试模式下也是如此。

    我猜当您第一次处理问题时,这不是一个选项,但现在您可以这样做了

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

    这是很棒的东西。我不知道这个界面。基于这个实现,我想我应该在注释中按数字引用参数:@PreAuthorize(“hasPermission(#arg0,'admin')”),老实说——我认为这对于我来说是好的。你觉得在分布式JAR中有调试信息怎么样?@HDave:我不能说任何关于分布式代码中调试信息的事情,我个人不喜欢调试信息相关的东西,因为它使代码的行为依赖于编译器选项。从2013年10月的spring secruity 3.1开始,这仍然是最好的方式吗?
    @PreAuthorize("hasPermission(#contact, 'admin')")
    public void deletePermission(@P("contact") Contact contact, Sid recipient, Permission permission);