Question

I'm trying to create custom realm for Glassfish V3.1.1 but I have some LoginException when I log in with BASIC method :

[#|2012-10-11T22:57:21.625+0200|FINE|glassfish3.1.2|org.apache.catalina.authenticator.AuthenticatorBase|_ThreadID=35;_ThreadName=Thread-2;ClassName=org.apache.catalina.authenticator.AuthenticatorBase;MethodName=invoke;|Security checking request GET /testForMySimRealm/S1|#]

[#|2012-10-11T22:57:21.625+0200|FINE|glassfish3.1.2|org.apache.catalina.authenticator.AuthenticatorBase|_ThreadID=35;_ThreadName=Thread-2;ClassName=org.apache.catalina.authenticator.AuthenticatorBase;MethodName=invoke;| Calling hasUserDataPermission()|#]

[#|2012-10-11T22:57:21.625+0200|FINE|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=35;_ThreadName=Thread-2;ClassName=com.sun.web.security.RealmAdapter;MethodName=hasUserDataPermission;|[Web-Security][ hasUserDataPermission ] Principal: null ContextPath: /testForMySimRealm|#]

[#|2012-10-11T22:57:21.625+0200|FINE|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=35;_ThreadName=Thread-2;ClassName=com.sun.web.security.RealmAdapter;MethodName=invokeWebSecurityManager;|[Web-Security] [ hasResourcePermission ] Principal: null ContextPath: /testForMySimRealm|#]

[#|2012-10-11T22:57:21.625+0200|FINE|glassfish3.1.2|org.apache.catalina.authenticator.AuthenticatorBase|_ThreadID=35;_ThreadName=Thread-2;ClassName=org.apache.catalina.authenticator.AuthenticatorBase;MethodName=invoke;| Calling authenticate()|#]

[#|2012-10-11T22:57:21.640+0200|FINE|glassfish3.1.2|org.apache.catalina.authenticator.AuthenticatorBase|_ThreadID=35;_ThreadName=Thread-2;ClassName=org.apache.catalina.authenticator.AuthenticatorBase;MethodName=invoke;| Failed authenticate() test|#]

[#|2012-10-11T22:57:21.640+0200|FINE|glassfish3.1.2|org.apache.catalina.connector.OutputBuffer|_ThreadID=35;_ThreadName=Thread-2;ClassName=org.apache.catalina.connector.OutputBuffer;MethodName=setConverter;|Got encoding: ISO-8859-1|#]

[#|2012-10-11T22:57:21.640+0200|FINE|glassfish3.1.2|org.apache.catalina.connector.OutputBuffer|_ThreadID=35;_ThreadName=Thread-2;ClassName=org.apache.catalina.connector.OutputBuffer;MethodName=realWriteBytes;|realWrite(b, 0, 1073) com.sun.grizzly.tcp.Response@192d307|#]

[#|2012-10-11T22:57:21.640+0200|FINEST|glassfish3.1.2|org.apache.catalina.connector.InputBuffer|_ThreadID=35;_ThreadName=Thread-2;ClassName=org.apache.catalina.connector.InputBuffer;MethodName=recycle;|recycle()|#]

[#|2012-10-11T22:57:21.640+0200|FINE|glassfish3.1.2|org.apache.catalina.connector.OutputBuffer|_ThreadID=35;_ThreadName=Thread-2;ClassName=org.apache.catalina.connector.OutputBuffer;MethodName=recycle;|recycle()|#]

[#|2012-10-11T22:57:24.625+0200|FINE|glassfish3.1.2|org.apache.catalina.authenticator.AuthenticatorBase|_ThreadID=36;_ThreadName=Thread-2;ClassName=org.apache.catalina.authenticator.AuthenticatorBase;MethodName=invoke;|Security checking request GET /testForMySimRealm/S1|#]

[#|2012-10-11T22:57:24.625+0200|FINE|glassfish3.1.2|org.apache.catalina.authenticator.AuthenticatorBase|_ThreadID=36;_ThreadName=Thread-2;ClassName=org.apache.catalina.authenticator.AuthenticatorBase;MethodName=invoke;| Calling hasUserDataPermission()|#]

[#|2012-10-11T22:57:24.625+0200|FINE|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=36;_ThreadName=Thread-2;ClassName=com.sun.web.security.RealmAdapter;MethodName=hasUserDataPermission;|[Web-Security][ hasUserDataPermission ] Principal: null ContextPath: /testForMySimRealm|#]

[#|2012-10-11T22:57:24.625+0200|FINE|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=36;_ThreadName=Thread-2;ClassName=com.sun.web.security.RealmAdapter;MethodName=invokeWebSecurityManager;|[Web-Security] [ hasResourcePermission ] Principal: null ContextPath: /testForMySimRealm|#]

[#|2012-10-11T22:57:24.625+0200|FINE|glassfish3.1.2|org.apache.catalina.authenticator.AuthenticatorBase|_ThreadID=36;_ThreadName=Thread-2;ClassName=org.apache.catalina.authenticator.AuthenticatorBase;MethodName=invoke;| Calling authenticate()|#]

[#|2012-10-11T22:57:24.625+0200|FINE|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=36;_ThreadName=Thread-2;ClassName=com.sun.web.security.RealmAdapter;MethodName=authenticate;|Tomcat callback for authenticate user/password|#]

[#|2012-10-11T22:57:24.625+0200|FINE|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=36;_ThreadName=Thread-2;ClassName=com.sun.web.security.RealmAdapter;MethodName=authenticate;|usename = j|#]

[#|2012-10-11T22:57:24.625+0200|WARNING|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=36;_ThreadName=Thread-2;|WEB9102: Web Login Failed: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Entrée NULL non valide : nom|#]

[#|2012-10-11T22:57:24.625+0200|FINE|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=36;_ThreadName=Thread-2;ClassName=com.sun.web.security.RealmAdapter;MethodName=authenticate;|Exception com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Entrée NULL non valide : nom at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:394) at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:240) at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:153) at com.sun.web.security.RealmAdapter.authenticate(RealmAdapter.java:514) at com.sun.web.security.RealmAdapter.authenticate(RealmAdapter.java:455) at org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:169) at com.sun.web.security.RealmAdapter.invokeAuthenticateDelegate(RealmAdapter.java:1333) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:551) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:623) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) Caused by: javax.security.auth.login.LoginException: Entrée NULL non valide : nom at javax.security.auth.login.LoginContext.init(LoginContext.java:246) at javax.security.auth.login.LoginContext.(LoginContext.java:382) at javax.security.auth.login.LoginContext.(LoginContext.java:459) at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:381) ... 28 more |#]

[#|2012-10-11T22:57:24.625+0200|FINE|glassfish3.1.2|org.apache.catalina.authenticator.AuthenticatorBase|_ThreadID=36;_ThreadName=Thread-2;ClassName=org.apache.catalina.authenticator.AuthenticatorBase;MethodName=invoke;| Failed authenticate() test|#]

[#|2012-10-11T22:57:24.625+0200|FINE|glassfish3.1.2|org.apache.catalina.connector.OutputBuffer|_ThreadID=36;_ThreadName=Thread-2;ClassName=org.apache.catalina.connector.OutputBuffer;MethodName=setConverter;|Got encoding: ISO-8859-1|#]

[#|2012-10-11T22:57:24.625+0200|FINE|glassfish3.1.2|org.apache.catalina.connector.OutputBuffer|_ThreadID=36;_ThreadName=Thread-2;ClassName=org.apache.catalina.connector.OutputBuffer;MethodName=realWriteBytes;|realWrite(b, 0, 1073) com.sun.grizzly.tcp.Response@7e592c|#]

[#|2012-10-11T22:57:24.625+0200|FINEST|glassfish3.1.2|org.apache.catalina.connector.InputBuffer|_ThreadID=36;_ThreadName=Thread-2;ClassName=org.apache.catalina.connector.InputBuffer;MethodName=recycle;|recycle()|#]

[#|2012-10-11T22:57:24.625+0200|FINE|glassfish3.1.2|org.apache.catalina.connector.OutputBuffer|_ThreadID=36;_ThreadName=Thread-2;ClassName=org.apache.catalina.connector.OutputBuffer;MethodName=recycle;|recycle()|#]

Here are my realm classes :

CustomSimLoginModule extends AppservPasswordLoginModule :

package com.sim;

import javax.security.auth.login.LoginException;

import com.sun.appserv.security.AppservPasswordLoginModule;

public class CustomSimLoginModule extends AppservPasswordLoginModule {
@Override
protected void authenticateUser() throws LoginException {
    // TODO Auto-generated method stub



    System.out.println("AUTHENTIFICATION !!");

    String[] grpList = {"ADMIN"};


    commitUserAuthentication(grpList);
}

}

CustomSimRealm extends AppservRealm :

package com.sim;

import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;

import com.sun.appserv.security.AppservRealm;
import com.sun.enterprise.security.auth.realm.BadRealmException;
import com.sun.enterprise.security.auth.realm.InvalidOperationException;
import com.sun.enterprise.security.auth.realm.NoSuchRealmException;
import com.sun.enterprise.security.auth.realm.NoSuchUserException;


public class CustomSimRealm extends AppservRealm {

    @Override
    public void init(Properties properties) throws BadRealmException, NoSuchRealmException {

        System.out.println("CustomSimRealm->init");

        Enumeration<?> names = properties.propertyNames();
        String name = null;

        while(names.hasMoreElements()){
            name = (String)names.nextElement();
            System.out.println("name->" + name + " value->" + properties.getProperty(name));
        }
    }

    @Override
    public String getAuthType() {
        return "BASIC";
    }

    @Override
    public Enumeration<String> getGroupNames(String username)
            throws InvalidOperationException, NoSuchUserException {


        Vector<String> v = new Vector<String>();
        v.add("ADMIN");

        return v.elements();
    }   


}

These 2 classes are packaged into JAR file with maven and with following dependency :

<dependency>
        <groupId>org.glassfish.main.security</groupId>
        <artifactId>security</artifactId>
        <version>3.1.2</version>
    </dependency>

JAR file is copied into ${GLASSFISH}/glassfish/domains/domain1/lib directory and I changed login.conf with :

 simRealm {
    com.sim.CustomSimLoginModule required;
};

and domain.xml wih :

  <auth-realm name="sim-realm" classname="com.sim.CustomSimRealm">
      <property name="prop1" value="test propriete 1"></property>
      <property name="prop2" value="test propriete 2"></property>
      <property description="null" name="jaas-context" value="simRealm"></property>
    </auth-realm>

No Exceptions thrown at Glassfish start but Exception above is thrown when user enter credentials.

What am I doing wrong please ?

PS: didn't use Glassfish create-auth-realm command, I changed manually login.conf and domain.xml, this could be the problem ?

Thanks for ideas

Olivier

Was it helpful?

Solution

Didn't call super.init(properties) in CustomSimRealm. Now problem is solved

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top