Play Framework 2.7 授权获取用户
Play Framework 2.7 Authorization Get User
我正在尝试向 Rest 添加授权 API 我在 Play 2.7 中构建。我找到了一个旧版本的好例子 here 但我无权访问 Http 上下文,因此我无法将用户添加为参数。
有没有另一种方法可以在 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 已被弃用?
您可以使用动作组合
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 的插件:
我正在尝试向 Rest 添加授权 API 我在 Play 2.7 中构建。我找到了一个旧版本的好例子 here 但我无权访问 Http 上下文,因此我无法将用户添加为参数。
有没有另一种方法可以在 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 已被弃用?
您可以使用动作组合
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 的插件: