如何设置自定义主体类

时间:2012-05-28 08:30:35

标签: java jboss6.x jaas

我正在尝试在JBoss 6.1 Final中使用自定义主体类。从the JBoss documentation来看,我必须添加一行

    <principalClass="es.caib.gesma.browseldap.LdapPrincipal"/>

进入login-config.xml文件,但目前尚不清楚究竟在哪里。我在应用程序策略定义中尝试了几个位置,但它总是会引发异常。

我尝试过的地方(一次一个)是:

<application-policy name="GesManPolicy">
                                          <----- Here
  <authentication>
                                          <----- Here
    <login-module code="es.caib.gesma.browseldap.BrowseLdapLoginModule" flag="required">
                                          <----- And here
    <module-option name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</module-option> 
    ...

我每次都得到的例外是

10:17:05,359 WARN  [XMLLoginConfigImpl] End loadConfig, failed to load config: vfs:/C:/desarrollo/jboss-6.1.0.Final/server/default/conf/login-config.xml:
org.jboss.security.auth.login.ParseException: Encountered " <ANY> "<?xml "" at line 1, column 1. Was expecting one of:
<EOF>
<IDENTIFIER> ...
at org.jboss.security.auth.login.SunConfigParser.generateParseException(SunConfigParser.java:415) [:3.0.0.CR2]
at org.jboss.security.auth.login.SunConfigParser.jj_consume_token(SunConfigParser.java:352) [:3.0.0.CR2]
at org.jboss.security.auth.login.SunConfigParser.config(SunConfigParser.java:99) 
....

我知道应该在何处/如何设置自定义主体?

提前致谢。

1 个答案:

答案 0 :(得分:1)

最后,JBoss文档是错误的。使用模块的module-option是否意味着主体不是由容器传递给模块,而是由模块创建?)它可以工作。

<module-option name="principalClass">es.caib.gesma.browseldap.LdapPrincipal</module-option>

如果你正在检查这个,下一个麻烦你将获得带有这个对象的JBoss容器(而不是SimplePrincipal副本)。为此,您的模块必须将您的主体对象添加到RolesSets,如下所示:

protected Group[] getRoleSets() throws LoginException {
  SimpleGroup callerPrincipal = new SimpleGroup("CallerPrincipal");
  callerPrincipal.addMember(this.getIdentity()); <--- YOUR PRINCIPAL OBJECT
  Group[] roleSets = { userRoles , callerPrincipal };
  return roleSets;
}