我正在开发我的第一个 Jsf、Jaas、JPA、JBoss 应用程序,现在我遇到了这个问题。我在 JBoss 中创建了两个安全域:
<security-domain name="Database" cache-type="default">
<authentication>
<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
<module-option name="dsJndiName" value="java:jboss/JaasDS"/>
<module-option name="principalsQuery" value="select password from user where mail=?"/>
<module-option name="rolesQuery" value="select role, 'Roles' from user u where u.mail=?"/>
</login-module>
</authentication>
</security-domain>
<security-domain name="Custom" cache-type="default">
<authentication>
<login-module code="demo.SampleLoginModule" flag="required"/>
</authentication>
</security-domain>
如果我使用“数据库”域,一切正常,而如果我使用“自定义”域,则无法将角色设置为主体。
我的示例登录模块
public class SampleLoginModule implements LoginModule {
private String username;
private String password;
private SamplePrincipal userPrincipal;
public boolean login() throws LoginException {
//Here i check the credentials
}
public boolean commit() throws LoginException {
//Here i add principal to subject
userPrincipal.setName("username");
if (!(subject.getPrincipals().contains(userPrincipal)))
subject.getPrincipals().add(userPrincipal);
}
}
}
我的简单校长
public class SamplePrincipal implements Principal {
private String name;
public SamplePrincipal() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我会在方法 commit 中为主体添加一个角色,isUserInRole
否则返回false
。
我怎样才能做到这一点?