2012-02-08 82 views
3

例如:有人可以使用Spring-Security PreAuthorize註釋嗎?

@PreAuthorize("hasRole('admin') && hasPermission('save', #user)") 
void updateUser(User user) { 
    // some code 
} 

而且沒有預先授權一些示例實現。

void updateUser(User user) { 
    Security.hasRole(Roles.ADMIN); 
    Security.hasPermission(Permission.SAVE, user); 
    // some code 
} 

第二個例子更容易理解。可以通過IDE重構(重命名角色,或查找所有角色用法)。在編譯時檢查代碼。工作更快。並可能有其他優點。

爲什麼春季安全開發者選擇了註釋和SpEL?有人能解釋嗎?

只有一個原因我可以找到 - 更容易訪問ApplicationContext。但據我所見,Spring Security通過SecurityContextHolder單例可以工作。

回答

3

從我的角度來看,最大的優點是,它可以很容易地在測試中停用(或更正確,不激活)。

因此,我可以寫我的測試(單元測試,功能測試,...),而不必關注安全的東西。以便測試可以專注於他們想要測試的功能。

當然這也是可能的「顯式」版本(第二個例子),但是我需要在測試中考慮它,這將使測試更長(更多代碼),也意味着更多的東西保持。

1

除了@Ralph答案我還會增加其他一些優點。

  1. @PreAuthorize(& CO。)是間註釋有@Documented,這意味着該註釋將在安全方法的Javadoc顯示。您的文檔的讀者將立即知道該方法是安全的,並且在什麼條件下。

  2. 由於它使用@Inherited進行元註釋,所以您可以將@PreAuthorize添加到父類,並自動讓所有層次結構保持安全,而無需實施任何其他模式。

相關問題