2016-08-09 47 views
0

我有4組:管理員,服務,用戶,訪客,管理員是在數據庫中創建的,第一次管理員登錄需要更改密碼,我想重定向到形式更改密碼,只有管理員需要的是,我在onAuthFailure中設置了重定向,但在某些操作中沒有進行身份驗證的服務,用戶,客戶和重定向更改密碼錶單,有一個好主意,請告訴我,我應該爲每個角色重定向其他鏈接? ,我剛剛在2天內閱讀了關於deadbolt的文件,我能不能理解更多,對我的英語感到抱歉。Deadbolt玩java更改密碼第一次登錄

謝謝。

回答

0

DeadboltHandler實現中,onAuthFailure方法可以使用getSubject來獲取當前用戶,並通過該方法獲取用戶擁有的角色。

public class MyDeadboltHandler implements DeadboltHandler { 
    private final DeadboltExecutionContextProvider executionContextProvider; 
    private final DeadboltAnalyzer analyzer; 

    @Inject 
    public MyDeadboltHandler(final ExecutionContextProvider ecProvider, 
          final DeadboltAnalyzer analyzer) { 
     this.executionContextProvider = ecProvider.get(); 
     this.analyzer =analyzer; 
    } 

    public CompletionStage<Result> onAuthFailure(Http.Context context, 
               Optional<String> content) { 
     final ExecutionContext executionContext = executionContextProvider.get(); 
     final ExecutionContextExecutor executor = HttpExecution.fromThread(executionContext); 
     return getSubject(context).thenApplyAsync(maybeSubject -> 
      maybeSubject.map(subject -> analyzer.hasRole(maybeSubject, "admin") ? /*go to admin section*/ 
                       : /*go to non-admin section*/) 
         .orElseGet(() -> /*no user present*/), 
            executor); 
    } 

    // other methods 
} 

任何地方在該例子中都有評論,例如, /*go to admin section*/您需要將其替換爲Result

DeadboltAnalyzer還有其他方法可用,所以如有必要,您可以進行比analyzer.hasRole(maybeSubject, "admin")更復雜的檢查。

+0

感謝您的代碼,但我不熟悉lambda表達式和併發,當我用Result替換'/ *轉到管理部分* /'時,他們可以,但是'/ *沒有用戶存在* /'替換爲Result,錯誤。對不起,我的愚蠢。 –

相關問題