3

私はジャージーと JAX-RS に比較的慣れていませんが、リソースのコンストラクター内での SecurityContext の使用に関するドキュメントで自分の道を見つけることができません。

私たちの OAUTH 実装は現在、REST API のすべてのリクエストが ResourceFilter の実装によってインターセプトされるようになっています。そのため、リソース フィルターは次のように呼び出してユーザー プリンシパルを設定します。

containerRequest.setSecurityContext(new MySecurityContext(user));

... ContainerRequest.filter() メソッド内で、具体的なクラス MySecurityContext を次のように使用します。

public class MySecurityContext implements SecurityContext {

    private final User principal;

    public MySecurityContext(final User user) {
        this.principal = user;
    }

    @Override
    public String getAuthenticationScheme() {
        return SecurityContext.FORM_AUTH;
    }

    @Override
    public Principal getUserPrincipal() {
        return principal;
    }

    @Override
    public boolean isSecure() {
        return false;

    }

    @Override
    public boolean isUserInRole(String role) {
        return principal.getRoles().contains(role);
    }
}

@GET/@POST/@DELETE メソッドが呼び出される前に、webresource のコンストラクターでそのユーザー プリンシパルを使用したいと考えています。注入してみた

@Context SecurityContext

..コンストラクターの引数リストに入れますが、getUserPrincipal() を呼び出すと null が返されます。

Webresource のコンストラクターでプリンシパル ユーザーを確認する方法はありますか?

ありがとう!

4

1 に答える 1

1

APIエンドポイントに挿入するとうまくいきます:

@POST
@ResourceFilters({MyAuthenticationFilter.class})
public Response foo(@Context HttpServletRequest request, @Context SecurityContext security) {
    final Principal principal = security.getUserPrincipal();
    [...]
    return Response.status(Response.Status.OK).build();
}
于 2015-07-09T09:41:49.653 に答える