このJaspic Exampleに基づいて、次validateRequest
の a のメソッドを作成しましたServerAuthModule
。
public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject,
Subject serviceSubject) throws AuthException {
boolean authenticated = false;
final HttpServletRequest request =
(HttpServletRequest) messageInfo.getRequestMessage();
final String token = request.getParameter("token");
TokenPrincipal principal = (TokenPrincipal) request.getUserPrincipal();
Callback[] callbacks = new Callback[] {
new CallerPrincipalCallback(clientSubject, (TokenPrincipal) null) };
if (principal != null) {
callbacks = new Callback[] {
new CallerPrincipalCallback(clientSubject, principal) };
authenticated = true;
} else {
if (token != null && token.length() == Constants.tokenLength) {
try {
principal = fetchUser(token);
} catch (final Exception e) {
throw (AuthException) new AuthException().initCause(e);
}
callbacks = new Callback[]
{
new CallerPrincipalCallback(clientSubject, principal),
new GroupPrincipalCallback(clientSubject,
new String[] { "aRole" })
};
messageInfo.getMap().put("javax.servlet.http.registerSession", "TRUE");
authenticated = true;
}
}
if (authenticated) {
try {
handler.handle(callbacks);
} catch (final Exception e) {
throw (AuthException) new AuthException().initCause(e);
}
return SUCCESS;
}
return AuthStatus.SEND_FAILURE;
}
これは、ejb の最初の呼び出しでは期待どおりに機能します@RolesAllowed("aRole")
が、次の呼び出しではまったく機能しません。Wildfly は、次のエラー メッセージでそれを否定しています。
ERROR [org.jboss.as.ejb3.invocation] (default task-4) WFLYEJB0034: EJB Invocation
failed on component TestEJB for method public java.lang.String
com.jaspic.security.TestEJB.getPrincipalName():
javax.ejb.EJBAccessException: WFLYSEC0027: Invalid User
私が正しいと思う場合、エラーは次の場所で発生します:
wilflyのソース コードのorg.jboss.as.security.service.SimpleSecurityManager
367 行目。credential
null
これは、Wildfly 8/9/10CR (他のバージョンはテストされていません) でも同じようです。
繰り返しますが、私が間違っているのか、それとも https://issues.jboss.org/browse/WFLY-4626と同じバグなのかわかりません。そして、それはバグですか、それとも予想される動作ですか?