2017-03-06 65 views
0

我有幾個REST API。@PreAuthorize如何檢查角色?

我想把安全放在他們所有人的頭頂上,以便只允許某些角色的功能。

我把@EnableGlobalMethodSecurity(prePostEnabled = true)放在配置類中。

我有一個DB存儲角色的表。

@RequestMapping(path = "/error", method = RequestMethod.GET) 
@PreAuthorize("hasRole('ROLE_ADMIN')") 
public ResponseEntity<ResponseWrapper> getError(... 


INSERT INTO table USER_ROLE VALUES ('ADMIN','PASSWORD','ROLE_ADMIN'); 

方法「hasRole」如何查詢表USER_ROLE? 爲了和那張桌子溝通,我有必要給Spring一些設置嗎?

+0

基本上我想了解@PreAuthorize如何與存儲多個角色的表進行通信。 – pacio14

回答

1

確保你添加以下到您的配置:

註釋風格:

@EnableGlobalMethodSecurity(prePostEnabled = true) 

XML風格:

<global-method-security pre-post-annotations="enabled"/> 

It's all in the spring docs

使用@Pre@Post註釋需要您首先在項目中設置spring安全性。用戶角色在標準實現中的認證過程中加載。

它在檢查註釋時(默認情況下)不檢查您的表格,它只檢查內存中的Principal(用戶)對象以獲取分配的GrantedAuthority(角色)列表。

仔細看看...

看看在UserDetailsService接口,這將返回的UserDetials一個實例(Principal)。這是我們從數據庫中獲取「用戶」的地方。

UserDetials接口定義了一個名爲getAuthorities()的方法,該方法返回Collection<? extends GrantedAuthority>,實際上是您的Role表。這是「角色」將其記錄到內存中的位置,稍後可通過@Pre@Post註釋進行檢查。

我上面解釋的實現可以找到here

+0

我把註釋放在配置文件中.. 我不明白角色是用戶的參數,請求的參數,還是我必須設置一些東西來安排「hasrole」方法和表格... – pacio14

+0

您必須設置類似於我現在在答案中解釋的內容。 – dkanejs