You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by mjmatch <mm...@crossroads.com> on 2010/08/12 21:46:03 UTC
Re: Tomcat JAAS Authentication NullPointerException
I resolved the issue. I had a bad equals function in my RolePrincipal object
that caused the null pointer exception.
mjmatch wrote:
>
> I have configured Tomcat to do JAAS authentication using a custom
> login/error page. I am getting a nullponterexception as defined below.
> Log messages indicate that my JAAS authentication module is invoked and
> returning 'true' from the auth module ::commit function. I have defined
> my own User and Role principle and specified in server.xml file. Any
> suggestions on how to debug the NPE that isn't in my code? I'm not sure
> what to look at next... Thanks.
> --Marco
>
> Exception
> =======
> INFO: Server startup in 9775 ms
> Aug 11, 2010 4:52:12 PM org.apache.catalina.connector.CoyoteAdapter
> service
> SEVERE: An exception or error occurred in the container during the request
> processing
> java.lang.NullPointerException
> at java.util.Arrays.binarySearch0(Arrays.java:2001)
> at java.util.Arrays.binarySearch(Arrays.java:1943)
> at
> org.apache.catalina.realm.GenericPrincipal.hasRole(GenericPrincipal.java:211)
> at org.apache.catalina.realm.RealmBase.hasRole(RealmBase.java:872)
> at
> org.apache.catalina.realm.RealmBase.hasResourcePermission(RealmBase.java:795)
> at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:545)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
> at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
> at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
> at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
> at java.lang.Thread.run(Thread.java:619)
>
> Realm Definition
> ==========
> <Realm className = "org.apache.catalina.realm.JAASRealm"
> appName="mikros"
> userClassNames="mikros.UserPrincipal"
> roleClassNames="mikros.RolePrincipal" />
>
> JAAS Login Module
> ===========
> public class Authenticator implements LoginModule {
> private static Logger log = Logger.getLogger(Authenticator.class);
>
> String loginName;
> CallbackHandler handler;
> Subject subject;
> Map<String, ?> sharedState;
> Map<String, ?> options;
>
>
> private boolean loginPassed = false;
>
> public Authenticator() {
>
> }
>
> @Override
> public boolean abort() throws LoginException {
> // TODO Auto-generated method stub
> return false;
> }
>
> @Override
> public boolean commit() throws LoginException {
> try {
> UserPrincipal user = new UserPrincipal(loginName);
> RolePrincipal role = new RolePrincipal("admin");
>
> subject.getPrincipals().add(user);
> subject.getPrincipals().add(role);
> log.debug("Added user and role principals.");
> } catch (Exception e) {
> throw new LoginException(e.getMessage());
> }
>
> return true;
> }
>
> @Override
> public void initialize(Subject subject,
> CallbackHandler callbackHandler,
> Map<String, ?> sharedState,
> Map<String, ?> options) {
> this.subject = subject;
> this.handler = callbackHandler;
> this.sharedState = sharedState;
> this.options = options;
>
> }
>
> @Override
> public boolean login() throws LoginException {
> log.debug("::login");
>
> String name = "";
> String pass = "";
>
> Context env = null;
> boolean passed = false;
> Callback[] callbacks = new Callback[2];
>
> callbacks[0] = new NameCallback("Username:");
> callbacks[1] = new PasswordCallback("Password:", false);
>
> try {
> handler.handle(callbacks);
>
> NameCallback nameCallback = (NameCallback) callbacks[0];
> name = nameCallback.getName();
> PasswordCallback passwordCallback = (PasswordCallback)
> callbacks[1];
> pass = new String(passwordCallback.getPassword());
>
> log.debug("log in name:" + name + " password:" + pass);
>
> if (name.equals("foo") &&
> pass.equals("bar")) {
> loginPassed = true;
> loginName = name;
> log.debug("login passed.");
> } else {
> loginPassed = false;
> log.debug("login failed.");
> }
>
> return loginPassed;
> }
> catch (Exception e) {
> throw new LoginException(e.getMessage());
> }
> }
>
> @Override
> public boolean logout() throws LoginException {
> try {
> UserPrincipal user = new UserPrincipal(loginName);
> RolePrincipal role = new RolePrincipal("admin");
> subject.getPrincipals().remove(user);
> subject.getPrincipals().remove(role);
> log.debug("Logged out:" + loginName);
> } catch (Exception e) {
> throw new LoginException(e.getMessage());
> }
>
> return true;
> }
> }
>
--
View this message in context: http://old.nabble.com/Tomcat-JAAS-Authentication-NullPointerException-tp29420005p29422578.html
Sent from the Tomcat - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org