【发布时间】:2019-06-04 10:07:45
【问题描述】:
我已关注this tutorial 配置用户ejbuser,密码12345678 和角色appCitas。我遵循的说明是:
C:\wildfly-14.0.1.Final\bin>jboss-cli.bat
您此时已断开连接。键入“connect”以连接到服务器,或键入“help”以获取支持的命令列表。
[断开/]连接[standalone@localhost:9990 /] /subsystem=elytron/filesystem-realm=proxyRealm:add(path=proxy-realm-users,relative-to=jboss.server.config.dir)
{"结果" => "成功"}[standalone@localhost:9990 /] /subsystem=elytron/filesystem-realm=proxyRealm:add-identity(identity=ejbuser)
{"结果" => "成功"}[standalone@localhost:9990 /] /subsystem=elytron/filesystem-realm=proxyRealm:set-password(identity=ejbuser,clear={password=12345678})
{"结果" => "成功"}[standalone@localhost:9990 /] /subsystem=elytron/filesystem-realm=proxyRealm:add-identity-attribute(identity=ejbuser,name=Roles,value=["guest", "appCitas"])
{"结果" => "成功"}[standalone@localhost:9990 /] /subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)
{"结果" => "成功"}[standalone@localhost:9990 /] /subsystem=elytron/security-domain=proxySD:add(default-realm=proxyRealm,permission-mapper=default-permission-mapper,realms=[{realm=proxyRealm,role-解码器=from-roles-attribute},{realm=local}])
{"结果" => "成功"}[standalone@localhost:9990 /] /subsystem=elytron/sasl-authentication-factory=proxy-application-sasl-autentication:add(mechanism-configurations=[{mechanism-name=JBOSS-LOCAL-USER,realm- mapper=local},{mechanism-realm-configurations=[{realm-name=proxyRealm}]},{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name= proxyRealm}]}],sasl-server-factory=configured,security-domain=proxySD)
{"结果" => "成功"}[standalone@localhost:9990 /] /subsystem=ejb3/application-security-domain=other:add(security-domain=proxySD)
{"结果" => "成功"}[standalone@localhost:9990 /] /subsystem=remoting/http-connector=http-remoting-connector:write-attribute(name=sasl-authentication-factory,value=proxy-application-sasl-autentication)
{ “结果” => “成功”, “响应标题” => { “操作需要重新加载”=> 真, “进程状态” => “需要重新加载” } }
在 mi EJB 中,我有
@WebService(
endpointInterface = "es.ssib.otic.test.prototipoEjbCitas.ApiCitasPublico",
name = "ApiCitasEjb")
@RolesAllowed("apiCitas")
@Stateless
public class ApiCitasPublicoImpl
implements ApiCitasPublico {
@Override
public @XmlElement(name = "pacienteCitaResponse", required = true) PacienteCitaResponse getPacienteCita(
@WebParam(name = "datosSolicitante") @XmlElement(required = true) IdPeticion idPaciente) {
...
}
我的jboss-app.xml 是
<?xml version="1.0" encoding="UTF-8"?>
<jboss-app>
<security-domain>other</security-domain>
</jboss-app>
ear 部署正确并且没有显示任何日志问题,但我尝试从 SoapUI 访问一个方法并添加一个基本身份验证,其中:
- 用户名:ejbuser
- 密码:12345678
- 域:我尝试过使用其他代理SD、proxyRealm 并将其留空
- 抢先式身份验证:我已将“域”的所有上述值与“使用全局首选项”和“抢先式身份验证”相结合。
在所有情况下,我都会得到一个
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>WFLYEJB0364: Invocation on method: public es.ssib.otic.test.prototipoEjbCitas.beans.PacienteCitaResponse es.ssib.otic.test.prototipoEjbCitas.impl.ApiCitasPublicoImpl.getPacienteCita(es.ssib.otic.test.prototipoEjbCitas.beans.IdPeticion) of bean: ApiCitasPublicoImpl is not allowed</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
如果我删除安全配置,我可以毫无问题地通过 SoapUI 访问。
使用 WildFly 14.0.0.1 Final。
注意:这个问题与my previous one有些关系,但是由于我已经重新安装了wildfly,并且我已经按照上面提到的教程一步一步地进行了操作,所以我认为最好将它作为一个单独的问题发布。
更新
按照@fjuma 的回答,我配置了以下内容:
[standalone@localhost:9990 /] /subsystem=elytron/http-authentication-factory=proxy-application-http-authentication:add(http-server-mechanism-factory=global,security-domain=proxySD,mechanism-配置=[{机制名称=BASIC,机制领域配置=[{领域名称=proxyAD}]}])
{"结果" => "成功"}[standalone@localhost:9990 /] /subsystem=undertow/application-security-domain=proxyAD:add(http-authentication-factory=proxy-application-http-authentication)
{"结果" => "成功"}
并将jboss-app.xml中的security-domain的值更改为proxyAD,部署耳朵时出现错误:
{
"WFLYCTL0412: 未安装的必需服务:" => ["jboss.security.security-domain.proxyAD"],
“WFLYCTL0180:缺少/不可用依赖项的服务”=> [
"jboss.deployment.subunit.\"prototipoEarCitas-0.0.1-SNAPSHOT.ear\".\"prototipoEjbCitas-0.0.1-SNAPSHOT.jar\".component.ApiCitasPublicoImpl.CREATE 丢失 [jboss.security.security-domain .proxyAD]",
"jboss.ws.endpoint.\"prototipoEarCitas-0.0.1-SNAPSHOT.ear\".\"prototipoEjbCitas-0.0.1-SNAPSHOT.jar\".ApiCitasPublicoImpl 丢失 [jboss.security.security-domain.proxyAD]"
]
}
【问题讨论】:
-
您能否解决上一个问题
WFLYCTL0412?在正确配置 elytron/undertow/ejb 安全域后,我看到了同样的错误。如果我删除@WebService注释,它会起作用。类作为普通 EJB 加载,但我一添加@WebService注释就会看到WFLYCTL0412。 -
在看到您对命名 3 个具有相同名称的安全域的评论后,我尝试了它,它现在可以工作了。奇怪的是它只需要
@WebService,普通的 EJB 和 Servlet 与不同名称的安全域一起工作。