Không có kỹ thuật nào được đề cập sẽ hoạt động nữa. Có vẻ như Spring đã trải qua một thời gian dài để ngăn người dùng ghi đè SecurityExpressionRoot.
CHỈNH SỬA 19/11/14 Thiết lập mùa xuân để sử dụng chú thích bảo mật:
<beans ... xmlns:sec="http://www.springframework.org/schema/security" ... >
...
<sec:global-method-security pre-post-annotations="enabled" />
Tạo một hạt đậu như thế này:
@Component("mySecurityService")
public class MySecurityService {
public boolean hasPermission(String key) {
return true;
}
}
Sau đó, làm một cái gì đó như thế này trong jsp của bạn:
<sec:authorize access="@mySecurityService.hasPermission('special')">
<input type="button" value="Special Button" />
</sec:authorize>
Hoặc chú thích một phương pháp:
@PreAuthorize("@mySecurityService.hasPermission('special')")
public void doSpecialStuff() { ... }
Ngoài ra, bạn có thể sử dụng Ngôn ngữ biểu thức mùa xuân trong các @PreAuthorize
chú thích của mình để truy cập xác thực hiện tại cũng như các đối số của phương thức.
Ví dụ:
@Component("mySecurityService")
public class MySecurityService {
public boolean hasPermission(Authentication authentication, String foo) { ... }
}
Sau đó, cập nhật của bạn @PreAuthorize
để khớp với chữ ký phương pháp mới:
@PreAuthorize("@mySecurityService.hasPermission(authentication, #foo)")
public void doSpecialStuff(String foo) { ... }