2010-05-25 32 views
6

Tôi đang cân nhắc sử dụng chú thích Spring Security cho ứng dụng của mình, với tính năng EL (ngôn ngữ biểu thức). Ví dụ:Chú thích bảo mật mùa xuân với EL - yêu cầu thông tin gỡ lỗi được biên dịch trong?

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

Tôi cần khả năng EL vì tôi đã xây dựng việc triển khai ACL của riêng mình. Tuy nhiên, để sử dụng khả năng này với "#Contact" đối số loại, tài liệu Xuân nói điều này:

Bạn có thể truy cập bất kỳ phương pháp lập luận theo tên như biểu biến, cung cấp mã của bạn có thông tin debug biên soạn trong

này đặt ra hai câu hỏi:.

  1. có thể chấp nhận để có một ứng dụng sản xuất thương mại được phân phối với thông tin gỡ lỗi trong đó?
  2. Nếu không, có cách nào xung quanh điều này không?

Cảm ơn bạn đã hướng dẫn về điều này!

Trả lời

9

Cách giải quyết khác là bạn có thể triển khai ParameterNameDiscoverer tùy chỉnh theo chiến lược của riêng mình. Dưới đây là một ví dụ trong đó sản xuất tên đánh số đơn giản (arg0, vv):

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; 
    } 
} 

Và cấu hình:

<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> 
+0

này là rất tốt. Tôi không biết về giao diện này. Dựa trên việc triển khai này, tôi đoán tôi sẽ đề cập đến các đối số theo số trong chú thích: @PreAuthorize ("hasPermission (# arg0, 'admin')") Thành thật mà nói - tôi nghĩ điều này là tốt cho mục đích của tôi . Bạn cảm thấy thế nào về thông tin gỡ lỗi trong các tệp JAR được phân phối? – HDave

+2

@HDave: Tôi không thể nói bất cứ điều gì về thông tin gỡ lỗi trong mã được phân phối, cá nhân, tôi không thích những thứ phụ thuộc vào thông tin gỡ lỗi vì nó làm cho hành vi của mã phụ thuộc vào các tùy chọn trình biên dịch. – axtavt

+0

Đây có phải là cách tốt nhất, tính đến mùa xuân secoity 3.1, tháng 10 năm 2013? – NimChimpsky

0

tôi không thể tìm thấy tài liệu tham khảo bây giờ, nhưng bạn có thể quan tâm để biết Java 8 sẽ bao gồm tên tham số mọi lúc, ngay cả khi tôi tin rằng Java 8 sẽ bao gồm tên tham số mọi lúc, ngay cả trong chế độ gỡ lỗi.

Các vấn đề liên quan