Để làm cho nó có thể viết các biểu thức mà không cần tên gói:
<sec:global-method-security>
<sec:expression-handler ref="methodSecurityExpressionHandler"/>
</sec:global-method-security>
<bean id="methodSecurityExpressionHandler" class="my.example.DefaultMethodSecurityExpressionHandler"/>
Sau đó mở rộng the DefaultMethodSecurityExpressionHandler:
public class DefaultMethodSecurityExpressionHandler extends org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler {
@Override
public StandardEvaluationContext createEvaluationContextInternal(final Authentication auth, final MethodInvocation mi) {
StandardEvaluationContext standardEvaluationContext = super.createEvaluationContextInternal(auth, mi);
((StandardTypeLocator) standardEvaluationContext.getTypeLocator()).registerImport("my.example");
return standardEvaluationContext;
}
}
Bây giờ tạo my.example.Roles.java:
public class Roles {
public static final String ROLE_UNAUTHENTICATED = "ROLE_UNAUTHENTICATED";
public static final String ROLE_AUTHENTICATED = "ROLE_AUTHENTICATED";
}
Và đề cập đến nó mà không có tên gói trong các chú thích:
@PreAuthorize("hasRole(T(Roles).ROLE_AUTHENTICATED)")
thay vì:
@PreAuthorize("hasRole(T(my.example.Roles).ROLE_AUTHENTICATED)")
Làm cho nó dễ đọc hơn IMHO. Ngoài ra, vai trò hiện đã được nhập. Viết:
@PreAuthorize("hasRole(T(Roles).ROLE_AUTHENTICATEDDDD)")
và bạn sẽ nhận được lỗi khởi động mà sẽ không có được ở đó nếu bạn đã viết:
@PreAuthorize("hasRole('ROLE_AUTHENTICATEDDDD')")
Nguồn
2014-06-17 11:16:25
Các công trình lớn, cảm ơn bạn! – RobEarl
@RobEarl Awesome Glad Tôi có thể giúp. Tôi cũng học được điều gì đó. –
Hoạt động, nhưng nó vẫn là một chuỗi diễn giải, vì vậy nó sẽ không được "nhìn thấy" bởi Eclipse khi bạn refactor ví dụ. tên tôi đoán. – yglodt