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