我们最近从 JAAS 切换到 Keycloak。应用程序是带有 EJB 和 MDB 的 JavaEE 应用程序。在 WildFly 中设置 keycloak 登录模块以将用户从 wen 传播到 EJB 并且它有效。但是当从 MDB 调用 EJB 时面临问题。收到消息时,MDB 中有匿名用户。因此,该用户无权调用受以下保护的 EJB:
<s:security>
<ejb-name>*</ejb-name>
<s:missing-method-permissions-deny-access>false</s:missing-method-permissions-deny-access>
<s:security-domain>keycloak</s:security-domain>
</s:security>
在 JAAS 版本中,我们使用专用 mdb 用户进行编程登录。
loginContext = new LoginContext("ldap", new CallbackHandler() {
@Override
public void handle(Callback[] callbacks) {
...
}
});
loginContext.login();
//Invoke EJB now as logged in user
这具有具有所需权限的用户。由于现在移至 Keycloak,此 JAAS 登录代码将不起作用。有什么选项可以防止从 MDB 调用 EJB 时出现权限问题?