2017-08-16 54 views
0

所以我們有一個授權服務器,用它來創建OAuth2訪問令牌。所有子系統都會驗證訪問令牌並可能檢查請求路徑的權限,但是在其中一個子系統中,我們需要查看請求主體並提取'id'以檢查用戶是否有適當的權限提交請求。請求消息採用JSON格式,這是一個帶有客戶端提供的標識的POST請求。如何訪問SpringBoot的AccessDecisionVoter中的請求正文?

請求中的id是一個進程ID,有些用戶可能沒有對某些進程的權限,因此我們需要該ID進行驗證。

因此,在AccessDecisionVoter,我們只能得到請求的URI,但我不能得到HttpServletRequest來讀取消息。 (注意:我們有一個請求封裝器,允許我們多次讀取請求體)

我試圖自動連線HttpServletRequest,沒有運氣。有一個錯誤,沒有線程已被請求

我也在考慮實施UserDetailService,但再次沒有運氣,因爲這不是由Spring啓動調用。請記住,我們正在使用自定義AuthorizationServerTokenServices,這是在一個共同的圖書館。

如何獲取Http servlet請求或AccessDecisionVoter中的請求主體?

回答

0

您應該可以實現可以獲取請求的AccessDecisionVoter<FilterInvocation>。這是行不通的:

public class MyAccessDecisionVoter implements AccessDecisionVoter<FilterInvocation> { 
    @Override 
    public boolean supports(ConfigAttribute attribute) { 
     return false; 
    } 

    @Override 
    public boolean supports(Class<?> clazz) { 
     return true; 
    } 

    @Override 
    public int vote(Authentication authentication, FilterInvocation fi, Collection<ConfigAttribute> attributes) { 
     int result = ACCESS_ABSTAIN; 
     fi.getRequest() // this is the request 
     // decide the outcome and set result 

     return result; 
    } 
} 
+0

謝謝!所以問題是,這是否是正確的地方?在良好的實踐方面? – xbmono

+0

這就是選民的決定:D – Strelok

相關問題