playframework - 如何将信息从 DeadboltHanlder 传递到 Controller-Method (Play Framework 2.8)
问题描述
在我们的 Play Framework 应用程序中,我们使用Deadbolt模块进行用户身份验证。这意味着getSubject()
我们的 DeadboltHandler 实现的方法将在实际的 Controller 方法之前被调用。但是,我们需要将确定的 User-ID 从 DeadboltHandler 的getSubject()
方法传输到 Controller 方法。
直到并包括 Play Framework 2.6,这可以通过将 User-ID 添加到 来轻松完成HttpContext.args
,因为HttpContext
在getSubject()
Controller-Method 和 Controller-Method 中都可以使用。不幸的是,在 Play Framework 2.7 及更高版本中,不再有HttpContext
- 我们必须HttpRequest
直接使用。但这似乎HttpRequest
是一成不变的;我们无法HttpRequest
轻松添加确定的用户 ID。
是的,有Http.Request.withAttrs()
,但这不会修改HttpRequest
对象,而是返回一个新HttpRequest
对象。因此,据我所知,这对于将任何信息从方法传递到 Controller 方法没有帮助。getSubject()
那么,在 Play Framework 2.7+ 中将特定于请求的信息从 DeadboltHandler 传递到 Controller-Method 的推荐方法是什么???
控制器类:
public class MyController extends Controller
{
@SubjectPresent
public CompletionStage<Result> search()
{
final Subject subject = Thingamabob.currentSubject();
/* I need something like this ^^^ */
}
}
DeadboltHandler 实现:
class public class MyDeadboltHandler extends AbstractDeadboltHandler {
@Override
public CompletionStage<Optional<? extends Subject>>
getSubject(final Http.RequestHeader request) {
final Subject subject = determineSubjectFromRequestHeader(request);
return CompletableFuture.completedFuture(Optional.of(subject));
}
}
注意:MyDeadboltHandler.subject()
确定 的方法由框架隐式Subject
调用,然后调用实际的控制器方法。
谢谢你和最好的问候。
解决方案
推荐阅读
- php - Apache Event + PHP FPM 并允许 URL 重写
- tensorflow - 如果层被冻结但 is_training 为真,BatchNorm 是否会在 Tensorflow 中进行训练?
- java - 当您有自定义用户模型时,如何在 Spring Boot 中设置角色?
- java - 如何获取嵌套类型的所有类型的内部结构?
- angular - 安装了 Angular 版本 6.1.3 但 ng 版本显示版本 Angular CLI: 9.0.4
- ssl - 打开 SSL 证书
- python - 如何在我的正则表达式结果中排除我的开始搜索词和结束搜索词,同时尝试在两个词之间找到句子中的词
- git - Git 同步特定分支文件夹 Rundeck
- ruby - Capybara 302 重定向得到空白页面
- c# - 具有作用域角色的 Microsoft.AspNetCore.Identity