【问题标题】:Play Framework 2.7 Authorization Get UserPlay Framework 2.7 授权获取用户
【发布时间】: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 已被弃用?

【问题讨论】:

    标签: java playframework play-framework-2.7


    【解决方案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。
    • 是的,他们在实施新版本方面并没有那么快,但他们正在努力。
    猜你喜欢
    • 1970-01-01
    • 2020-01-12
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多