HttpService
を使用してOSGiバンドルにサーブレットを登録します。セキュリティを処理する独自のHttpContext
クラスを作成しました - BasicAuthenticationとActiveDirectoryに対してチェックします。OSGiサーブレットでセキュリティを処理する際のユーザ役割の設定方法
Dictionary<String, String> params = new Hashtable<String, String>();
params.put("jersey.config.server.provider.classnames", SettingsService.class.getName());
HttpContext ctx = new HttpContext()
{
@Override
public boolean handleSecurity(HttpServletRequest request, HttpServletResponse response) throws IOException
{
// validation against Active Directory here
return ADAuth.authenticate(request, response);
}
@Override
public URL getResource(String name)
{
return null;
}
@Override
public String getMimeType(String name)
{
return null;
}
};
httpService.registerServlet("/rest", new MyServlet(), params, ctx); //$NON-NLS-1$
httpService.registerResources("/web", "/web", null);
これまでのところとても良いです。私は@RolesAllowed
注釈を使用できるように、ログインしたユーザーの役割を設定したいと考えています。役割はActive Directoryグループによって異なります。
どのように役割を設定しますか?
HttpSession session = request.getSession(true);
Subject subject = (Subject) session.getAttribute("javax.security.auth.subject");
if (subject == null) {
subject = new Subject();
subject.getPrincipals().add(new PlainRolePrincipal(groupName));
session.setAttribute("javax.security.auth.subject", subject);
}
しかし、request.isUserInRole
は常にfalseを返します。
更新
私はrequest.isUserInRole
に足を踏み入れるとき、私は最終的にこのコードを取得する:
if (_authentication instanceof Authentication.Deferred)
setAuthentication(((Authentication.Deferred)_authentication).authenticate(this));
if (_authentication instanceof Authentication.User)
return ((Authentication.User)_authentication).isUserInRole(_scope,role);
return false;
_authentication
値はnullです。いつ/どこでこれを設定する必要がありますか?
ありがとうございました。良いキャッチ。残念ながら、私はちょうど質問に完全に私のコードをコピーしていない。問題はまだ残っています。 – paul