2017-03-06 41 views
1

我有一個使用Spring Security和Spring Boot使用Web Started包編寫的REST API。我有幾個方法檢查一個JWT令牌:我可以使用Spring Security @PreAuthorize檢查HTTP標頭嗎?

@RequestMapping(value = "/list", 
     method = GET, 
     produces = APPLICATION_JSON_VALUE) 
public HttpEntity<List<Item>> list(@RequestHeader(name = TOKEN_HEADER) String token) { 
    // validate token 
    // do something 
} 

是否可以移動令牌檢查,將通過@PreAuthorize註釋調用的方法?例如:

@RequestMapping(value = "/list", 
     method = GET, 
     produces = APPLICATION_JSON_VALUE) 
@PreAuthorize("myMethod(headers)") 
public HttpEntity<List<Item>> list(@RequestHeader(name = TOKEN_HEADER) String token) { 
    // do something 
} 

void myMethod(HttpHeaders headers) { 
    // validate token 
} 

該令牌包含有關特定用戶可以訪問的資源的一些信息。如果令牌不包含用戶請求的資源或基礎數據層中的數據表示用戶無權訪問該資源,則返回HTTP 403.

+0

複製到此? http://stackoverflow.com/questions/26747452/how-to-use-custom-expressions-in-spring-security-preauthorize-postauthorize-an –

回答

0

您試圖將身份驗證和授權委派給控制器,並不是一個好主意。

在標頭上處理標記的方法是實現一個過濾器,它通過令牌封裝了認證和授權,並將登錄的用戶和角色放入會話中。

然後,預授權註釋根據需要檢查上下文。

您可以看到https://jwt.io/以瞭解令牌流。

+0

我已經有一個過濾器,使用令牌進行身份驗證和授權。但是,過濾器不知道特定用戶是否創建了給定的資源。現在我想返回ID爲的資源: 'GET/resource/1' 過濾器檢查用戶是否已登錄並且有權檢索資源。 控制器然後解析請求,並使用對服務的調用來檢查用戶是否是資源ID 1的所有者。 如果我要把這是一個過濾器,那麼過濾器將不得不解析請求並調用服務。 – sm4

相關問題