2010-10-27 68 views
2

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-Errorcode 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> 

的问题是我在哪里配置中的作用。

回答

4

你必须在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

UPDATE:

关于“使用不同的网络资源的集合不同的安全约束”你的问题的一部分,你可以将它添加不同的“安全性约束”对于每个组的资源控制:

<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> 

请注意,这两个角色将通过在登录时asociated的LoginModule提取 时间。因此,当您的LoginModule对用户进行身份验证时,它将检索此用户所属的一组角色。

+0

感谢您的回复。是的,我确实设置了应用程序策略,因为我注意到它适用于验证用户身份。问题是我还需要检查角色。 – stacker 2010-10-27 15:31:01

+0

除了身份验证之外,登录模块还负责授权(以链接到用户会话的主体对象的形式加载用户身份的用户配置文件)。根据选择的实现方式,它以不同的方式进行配置(用于LdapLoginModule的组,用于简单UsersRolesLoginModule的roles.properties等)。 – 2010-10-27 15:34:32

1

通过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(); 
     } 
    } 
} 
+0

谢谢,但我不再有这种环境。 (1) – stacker 2011-12-20 13:09:00