Debugging 带EL的Spring安全注释--需要在中编译调试信息?
我正在考虑为我的应用程序使用Spring安全注释,并带有EL(表达式语言)特性。例如: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文档说明如下: 您可以
@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);