使用Elytron进行WIldfly和JavaEE安全配置

使用Elytron进行WIldfly和JavaEE安全配置,java,security,jakarta-ee,wildfly,elytron,Java,Security,Jakarta Ee,Wildfly,Elytron,我正试图更加熟悉Wildfly安全配置,在理解服务器端配置(如standalone.xml)和应用程序端配置(如web.xml和jboss-web.xml)中的选项之间的关系时遇到一些问题 关于这个基于Wildfly servlet安全示例的配置,我有几个问题。我已经试过了,但有几件事我还不清楚 我如何看待基本的身份验证类型是在服务器端的身份验证工厂和应用程序端的web.xml中定义的。哪一个有优先权。有义务申报两次吗 领域“RealmUsersRoles”的名称。这是否意味着服务器端配置和we

我正试图更加熟悉Wildfly安全配置,在理解服务器端配置(如standalone.xml)和应用程序端配置(如web.xml和jboss-web.xml)中的选项之间的关系时遇到一些问题

关于这个基于Wildfly servlet安全示例的配置,我有几个问题。我已经试过了,但有几件事我还不清楚

  • 我如何看待基本的身份验证类型是在服务器端的身份验证工厂和应用程序端的web.xml中定义的。哪一个有优先权。有义务申报两次吗
  • 领域“RealmUsersRoles”的名称。这是否意味着服务器端配置和web.xml中的相同实体
  • 在理想的情况下,我想得到这个配置中提到的所有安全实体之间互连的解释
  • 下面是JBossCLI配置脚本

    # 1. Add the JDBC security realm creation
    /subsystem=elytron/jdbc-realm=servlet-security-jdbc-realm:add(\
    principal-query=[\
    {sql="SELECT PASSWORD FROM USERS WHERE USERNAME = ?", data-source="MySQLDS", clear-password-mapper={password-index=1}},\
    {sql="SELECT R.NAME, 'Roles' FROM USERS_ROLES UR INNER JOIN ROLES R ON R.ID = UR.ROLE_ID INNER JOIN USERS U ON U.ID = UR.USER_ID WHERE U.USERNAME = ?", data-source="MySQLDS", attribute-mapping=[{index=1, to=roles}]}])
    
    # 2. Add a simple role decoder for the "roles" attribute mapping
    /subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=roles)
    
    # 3. Configure the servlet-security-quickstart security domain
    /subsystem=elytron/security-domain=servlet-security-quickstart-sd:add(\
    default-realm=servlet-security-jdbc-realm, \
    realms=[{realm=servlet-security-jdbc-realm, role-decoder=from-roles-attribute}], \
    permission-mapper=default-permission-mapper)
    
    # 4. Configure the HTTP Authentication Factory
    /subsystem=elytron/http-authentication-factory=servlet-security-quickstart-http-auth:add(\
    http-server-mechanism-factory=global,\
    security-domain=servlet-security-quickstart-sd,\
    mechanism-configurations=[{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name=RealmUsersRoles}]}])
    
    # 5. Configure Undertow's application security domain
    /subsystem=undertow/application-security-domain=servlet-security-quickstart:add(\
    http-authentication-factory=servlet-security-quickstart-http-auth)
    
    web.xml

    <?xml version="1.0"?>
    <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    
        <login-config>
            <auth-method>BASIC</auth-method>
            <realm-name>RealmUsersRoles</realm-name>
        </login-config>
    </web-app>
    
    
    

    下面是我基于这个示例的所有代码,并做了一些修改

  • 您需要在服务器配置中配置身份验证的基本类型,而不是在
    web.xml
  • 域名并不重要。当您获得
    401未经授权
    (WWW-Authenticate
  • 标题)时,它仅显示在浏览器中。如果在
    web.xml
    中配置了ream名称,则使用该名称,否则使用服务器配置中的名称
    我是如何从一些实验中发现的。在服务器端,我们定义了所有的身份验证方法,这对于我们在这个服务器上运行的应用程序应该是可能的。在web.xml中,我们选择要在此应用程序中使用的确切方法。若我在服务器配置ant中只有基本身份验证,尝试在应用程序中使用其他身份验证,则会出现错误。也许我错了。计划重新检查。
    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-web>
        <security-domain>servlet-security-quickstart</security-domain>
    </jboss-web>