繁体   English   中英

Play Framework 2.7授权获取用户

[英]Play Framework 2.7 Authorization Get User

我正在尝试向Play 2.7中内置的Rest API添加授权。 我在这里找到了较早版本的很好的例子,但是我没有访问Http上下文的权限,因此无法将用户添加为arg。

是否有另一种方式来做到在播放2.7无需访问上下文?

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 Controller中一样从其他控制器中获取用户。

编辑:我的问题归结为您,由于Http.Context被弃用,您在Play 2.7中将经过身份验证的用户存储在哪里?

您可以使用动作组合

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM