当前位置: 首页 > 知识库问答 >
问题:

配置安全性以通过WS-WFlyEJB0364连接访问EJB时被拒绝

上官正志
2023-03-14

我已经按照本教程使用密码12345678和角色appcitas配置用户ejbuser。我遵循的指示是:

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)
{“output”=>“success”}

[standalone@localhost:9990/]/subsystem=elytron/filesystem-realm=proxyrealm:add-identity(identity=ejbuser)
{“output”=>“success”}

[standalone@localhost:9990/]/subsystem=elytron/filesystem-realm=proxyrealm:set-password(identity=ejbuser,clear={password=12345678})
{“output”=>“成功”}

[standalone@localhost:9990/]/subsystem=elytron/filesystem-realm=proxyrealm:add-identity-attribute(identity=ejbuser,name=roles,value=[“guest”,“appcitas”])
{“output”=>“success”}

[standalone@localhost:9990/]/subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=roles)
{“outlate”=>“success”}

[standalone@localhost:9990/]/subsystem=elytron/security-domain=proxysd:add(default-realm=proxyrealm,permission-mapper=default-permission-mapper,realms=[{realm=proxyrealm,role-decoder=from-roles-attribute},{realm=local}])
{“output”=>“成功”}

[standalone@localhost:9990/]/subsystem=elytron/sasl-authentication-factory=proxy-application-sasl-autentiation:add(mechanism-configurations=[{mechanism-name=jboss-local-user,realm-mapper=local},{mechanism-name=digest-md5,mechanism-realm-configurations=[{realm-name=proxyrealm}]},{mechanism-name=basic,

[standalone@localhost:9990/]/subsystem=ejb3/application-security-domain=other:add(Security-domain=proxySD)
{“output”=>“success”}

[standalone@localhost:9990/]/subsystem=remoting/http-connector=http-remoting-connector:write-attribute(Name=SASL-authentication-Factory,value=proxy-application-sasL-autentication)
{“output”=>“success”,“response-Headers”=>{“operation-required-reload”=>true,“process-state”=>“reload-required”}}

在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
  • 域:我已尝试使用other、proxySD、proxyRealm并将其保留为空
  • 抢先身份验证:我已将“domain”的上述所有值与“use-global-preference”和“authenticate pre-emptivality”结合起来。
<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。

注意:这个问题和我之前的问题有些关联,但是由于我已经重新安装了wildfly,并且我已经按部就班地遵循了上面提到的教程,所以我认为还是把它作为一个单独的问题贴出来比较好。

[standalone@localhost:9990/]/subsystem=undertow/application-security-domain=proxyad:add(http-authentication-factory=proxy-application-http-authentication)
{“output”=>“success”}

并将jboss-app.xml中的security-domain的值更改为proxyad时,部署EAR时会出现错误:

{
“WflyCTL0412:未安装的必需服务:”=>[“jboss.security.security-domain.proxyad”],
“WflyCTL0180:具有丢失/不可用依赖项的服务”=>[
“jboss.deployment.subunit.\”Prototipoearcitas-0.0.1-snapshot.ear\“.\”Prototipoearcitas-0.0.1-snapshot.jar\“.Component.ApicitasPublicoImpl.Create缺少

共有1个答案

高飞翮
2023-03-14

有几件事需要注意:

>

  • 要使用HTTP基本身份验证,需要一个Elytronhttp-authentication-factory。有关如何配置的文档可以在这里找到。

    在使用HTTP基本身份验证时,还需要在Undertow子系统中添加application-security-domain映射。有关使用WebServices时与此相关的更多细节,请参见https://developer.jboss.org/thread/276445。

    这是通过WS配置EJB访问的最后一个最小命令集(在全新的Wildfly 14.0.1.final上测试):

    C:\wildfly-14.0.1.final\bin>jboss-cli.bat
    您现在断开了连接。键入“connect”连接到服务器,或键入“help”获取支持的命令列表。
    [断开连接/]连接

    [standalone@localhost:9990/]/subsystem=elytron/properties-realm=proxyrealm:add(Groups-attribute=组,groups-properties={path=proxy-roles.properties,relative-to=JBoss.server.config.dir},users-properties={path=proxy-users.properties,relative-to=JBoss.server.config.dir,plain-text=true})
    {“结果”=>“成功”}

    [standalone@localhost:9990/]/subsystem=elytron/security-domain=proxySD:add(realms=[{realm=proxyRealm,role-decoder=groups-to-roles}],default-realm=proxyRealm,permission-mapper=default-permission-mapper)
    {“outlate”=>“成功”}

    [standalone@localhost:9990/]/subsystem=elytron/http-authentication-factory=proxy-http-auth:add(http-server-mechanism-factory=global,security-domain=proxySD,mechanism-configurations=[{mechanism-name=basic,mechanism-realm-configurations=[{realm-name=proxyrealm}]}]
    {“结果”=>“成功”}

    [standalone@localhost:9990/]/subsystem=undertow/application-security-domain=proxySD:add(http-authentication-factory=proxy-http-auth)
    {“output”=>“success”}

    [standalone@localhost:9990/]/subsystem=elytron/sasl-authentication-factory=proxy-app-sasl-auth:add(mechanism-configurations=[{mechanism-name=jboss-local-user,realm-mapper=local},{mechanism-name=basic,mechanism-realm-configurations=[{realm-name=proxyrealm}]}],sasl-server-factory=configurated,

    [standalone@localhost:9990/]/subsystem=ejb3/application-security-domain=proxySD:add(Security-domain=proxySD)
    {“output”=>“success”}

    备注:

    >

  • 您可能已经注意到,我从文件系统领域切换到了属性领域。这与问题无关,只是它使调试变得更容易。

    基于EJB的WS必须使用“authenticate pre-empative”来调用,在第一个请求中发送身份验证数据,而不需要服务器的提示。war中基于POJO的WS使用web页面的身份验证系统,因此不需要先发制人地进行身份验证。

  •  类似资料:
    • [Standalone@localhost:9990/]/subsystem=elytron/filesystem-realm=proxyrealm:add(path=proxy-realm-users,relative-to=jboss.server.config.dir) {“结果”=>“成功”} [standalone@localhost:9990/]/subsystem=elytron/f

    • 我已经在Google VM实例(Ubuntu-16.04)中安装了elasticsearch和kibana,并分别进行了配置。我已经检查了elasticsearch和kibana的状态。两者都处于活动(运行状态)。 我已经使用curl-XGET“{ip addr}:9200”命令查看了elasticsearch。输出是 当我试图用curl-XGET“{ip addr}:5601”查看kibana时

    • 我试图通过Jedis客户端连接到redis服务器,但在连接时我得到了以下异常和堆栈跟踪- redisconnectionFailureException:无法获得Jedis连接;嵌套异常是redis.clients.jedis.exceptions.jedisconnectionException:无法从位于org.springframework.data.redis.connection.jed

    • 问题内容: 我让ELK堆栈在VM内的docker容器中运行。 我可以向ES填充,它可以在Kibana中显示。 我可以使用Logstash读取文件并将其输出到stdout。 但是Logstash无法将数据发送到ES (启用或禁用xpack似乎没有什么不同) 输出 之后,它会在“发送批量请求”,“执行运行状况检查”,“尝试复活”和“意外的池错误”之间保持循环。 随着每一次的同时,我也看到了 问题答案:

    • org.hibernate.exception.jdbc.c.connections.internal.basicConnectionCreator$1$1.Convert(basicConnectionCreator.java:122)在org.hibernate.engine.jdbc.connections.internal.driverConnection.java:140)在org.hi

    • 我已经创建了谷歌应用程序引擎项目,使用预测Api 1.5v。当我在本地均值localhost:8888使用谷歌o2Auth身份验证与客户端ID和客户端运行时,它对我来说工作正常secret.but当我实时运行它时,它会给出一个错误 Java语言安全AccessControlException:访问被拒绝(“java.io.FilePermission”“/base/data/home/apps/s