我正在尝试在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)
....
我知道应该在何处/如何设置自定义主体?
提前致谢。
答案 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;
}