SSO 実装である Shibboleth によって保護された Jersey API があります。Shibboleth は、ログインしているユーザーの ID をリクエスト属性に入れます。バックエンドでは、認証に Shiro を使用しています。Shiro は、アクセス許可をロードできるように、ログインしているユーザーを知りたいと考えています。
その userId を request 属性から Shiro に取得する正しい方法は何ですか? 今、私が試しているのは:
@Provider
public final class ShiroLoginFilter implements ContainerRequestFilter {
@Context
private HttpServletRequest request;
@Override
public void filter(final ContainerRequestContext requestContext)
throws IOException {
final String userId = (String) this.request.getAttribute("nameid");
final Subject subject = SecurityUtils.getSubject();
subject.login(new LocusAuthenticationToken(userId));
}
}
残念ながら、JERSEY-1960により、リクエスト コンテキストをフィルターに挿入できません。権限をロードするには、すべてのユーザーが「ログイン」する必要があります。API のすべてのメソッドでログイン コードを繰り返す必要はありません。また、web.xml フィルターの使用も許可されていません (上司から)。ここで何か良い選択肢はありますか?