代码之家  ›  专栏  ›  技术社区  ›  stacker

如何通过角色声明性对用户进行身份验证?

  •  2
  • stacker  · 技术社区  · 15 年前

    如何将Seam配置为对不同的Web资源集合使用不同的安全约束?

    web.xml 我包括了一个像

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>AdminPages</web-resource-name>
            <url-pattern>/secure/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>
    
    <security-role>
        <role-name>admin</role-name>
    </security-role>
    

    如果忽略上面的配置(web.xml)。使用JAAS对用户进行身份验证(仅密码)。我不想为authenticatin编写代码,我只需要检查用户是否具有所需的角色(admin)。

    在Seam中,这并不像预期的那样工作。我在尝试访问中的页面时收到HTTP错误代码403。 /secure/*

    我在中配置 components.xml 这在web.xml未更改时有效。

    <security:identity jaas-config-name="admins" />
    

    jboss-web.xml

    <jboss-web>
        <security-domain>java:/jaas/admins</security-domain>
    </jboss-web>
    

    问题是我应该在哪里配置角色。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Tomas Narros    15 年前

    您必须在JBoss上设置一个新的安全域。

    例如:

    <policy>
        <application-policy name="testUsersRoles">
            <authentication>
                <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
                              flag="required">
                    <module-option name="usersProperties">usersb64.properties</module-option>
                    <module-option name="hashAlgorithm">MD5</module-option>
                    <module-option name="hashEncoding">base64</module-option>
                    <module-option name="unauthenticatedIdentity">nobody</module-option>
                </login-module>
            </authentication>
        </application-policy>
    </policy>
    

    (在jboss实例的conf/login-config.xml文件中)。

    您可以在这里了解更多信息: Security on JBoss

    更新:

    关于问题的“对不同的Web资源集合使用不同的安全约束”部分,您可以设置它,为要控制的每一组资源添加不同的“安全约束”:

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>AdminPages</web-resource-name>
            <url-pattern>/secure/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>
    
    
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>CommonUserPages</web-resource-name>
            <url-pattern>/common/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
            <role-name>commonUser</role-name>
        </auth-constraint>
    </security-constraint>
    
    <security-role>
        <role-name>admin</role-name>
        <role-name>commonUser</role-name>
    </security-role>
    

    请注意,两个角色都将在登录时由关联的loginmodule提取。因此,当您的loginmodule对用户进行身份验证时,它会检索该用户所属的角色集。

        2
  •  1
  •   vtyro    14 年前

    对PostAuthenticate方法使用自定义缩进。

    <security:identity jaas-config-name="admins" class="my.Identity"/>
    

    示例代码:

    package my;
    
    public class Identity extends org.jboss.seam.security.Identity {
    
        private static final long serialVersionUID = 1L;
    
        @Override
        protected void postAuthenticate() {
            super.postAuthenticate();
            if(isLoggedIn() && !hasRole("admin")) {
                unAuthenticate();
            }
        }
    }
    
    推荐文章