Добрый день!
Есть JBoss 5RC2.
В нём есть EAR с EJB-jar'ом, в котором jboss.xml:
<jboss>
<security-domain>java:/jaas/ASKUR</security-domain>
</jboss>
login-config.xml:
<application-policy name = "ASKUR">
<authentication>
<login-module code = "ru.infosfera.auth.RolesLoginModule" flag = "required">
</login-module>
</authentication>
</application-policy>
RolesLoginModule всех пускает, но всё записывает:
public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options)
{
log.error("initialize...");
for (String key: sharedState.keySet())
log.error(" sharedState[" + key + "]=" + sharedState.get(key).toString());
С клиента коннекчусь:
Hashtable<String, String> params = new Hashtable<String, String>();
params.put(Context.PROVIDER_URL , "jnp://localhost:1099");
System.setProperty("java.security.auth.login.config","auth.conf");
params.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.LoginInitialContextFactory");
params.put(Context.SECURITY_PROTOCOL , "EJB");
params.put(Context.AUTHORITATIVE, "true");
params.put(Context.SECURITY_PRINCIPAL, "root");
params.put(Context.SECURITY_CREDENTIALS, "root");
params.put("javax.security.auth.login.name", "root");
params.put("javax.security.auth.login.password", "root");
try{
Context ctx = new InitialContext(params);
Object obj = ctx.lookup("EJB/Auth/AuthContext");
AuthContextRemote auth = (AuthContextRemote) PortableRemoteObject.narrow(obj, AuthContextRemote.class);
System.out.println("Auth: " + auth.test());
...
auth.conf:
EJB {
org.jboss.security.ClientLoginModule required;
};
Так вот — в лог сервера попадает пустота — т.е. в sharedState пусто.
Вопрос- как передать информацию о логине на сервер?