Deadbolt播放java第一次登录时更改密码

时间:2016-08-09 10:36:33

标签: java playframework deadbolt

我有4组:管理员,服务,用户,访客,管理员在数据库中创建,第一次管理员登录需要更改密码,我想重定向到表单更改密码而只有管理员需要,我在onAuthFailure中设置重定向,但服务,用户,访客在某些操作中没有身份验证并重定向更改密码表单,请告诉我,我应该为每个角色重定向另一个链接做些什么? ,我刚刚在2天内阅读了关于deadbolt的文件,我能不明白,对不起我的英文。

感谢。

1 个答案:

答案 0 :(得分: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")更复杂的检查。