Play Framework 2.7 授权获取用户
Posted
技术标签:
【中文标题】Play Framework 2.7 授权获取用户【英文标题】:Play Framework 2.7 Authorization Get User 【发布时间】:2019-03-16 08:19:26 【问题描述】:我正在尝试向我在 Play 2.7 中构建的 Rest API 添加授权。我为较旧的游戏版本找到了一个很好的例子here,但我无权访问 Http 上下文,因此我无法将用户添加为 arg。
还有其他方法可以在 Play 2.7 中执行 this 而无需访问上下文吗?
public class Secured extends Security.Authenticator
@Override
public String getUsername(Context ctx)
String[] authTokenHeaderValues = ctx.request().headers().get(SecurityController.AUTH_TOKEN_HEADER);
if ((authTokenHeaderValues != null) && (authTokenHeaderValues.length == 1) && (authTokenHeaderValues[0] != null))
User user = models.User.findByAuthToken(authTokenHeaderValues[0]);
if (user != null)
ctx.args.put("user", user);
return user.getEmailAddress();
return null;
@Override
public Result onUnauthorized(Context ctx)
return unauthorized();
我希望能够从其他控制器中获取用户,就像他们在 Todo 控制器中所做的那样。
编辑:我的问题归结为您在 Play 2.7 中将经过身份验证的用户存储在哪里,因为 Http.Context 已被弃用?
【问题讨论】:
【参考方案1】:您可以使用动作组合
https://www.playframework.com/documentation/2.7.x/JavaActionsComposition#Passing-objects-from-action-to-controller
public class Attrs
public static final TypedKey<User> USER = TypedKey.<User>create("user");
public class PassArgAction extends play.mvc.Action.Simple
public CompletionStage<Result> call(Http.Request req)
return delegate.call(req.addAttr(Attrs.USER, User.findById(1234)));
在控制器中:
@With(PassArgAction.class)
public static Result passArgIndex(Http.Request request)
User user = request.attrs().get(Attrs.USER);
return ok(Json.toJson(user));
我建议你也看看 pac4j。它有一个 playframework 插件:
https://github.com/pac4j/play-pac4j
https://github.com/pac4j/play-pac4j-java-demo
【讨论】:
谢谢,动作组合正是我想要的。不幸的是,据我所知,pac4j 不支持 play 2.7。 是的,他们在实施新版本方面并没有那么快,但他们正在努力。以上是关于Play Framework 2.7 授权获取用户的主要内容,如果未能解决你的问题,请参考以下文章
包 io.ebean 不存在 Play Framework 2.7
Play Framework 1.2.7 添加选择标签到表单标签作为输入字段
是否可以在 Play Framework 2.7 中访问动作组合中的路由参数?
如何在 Play Framework v1.2.7 中配置带有动态 id 属性的 POST 路由,该属性将加载 JPA 实体