如何将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中,这不会像预期的那样工作。我在尝试访问/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>
问题是我在哪里配置角色。
答案 0 :(得分: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
更新:
关于“对不同的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对用户进行身份验证时,它会检索该用户所属的角色集。
答案 1 :(得分:1)
将自定义标识与post Authenticate方法一起使用。
<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();
}
}
}