java - javax.security.auth.login.LoginException: No LoginModules configured for SomeLogin -


well i'm trying create jaas authentication servlet (running on tomcat 7 in eclipse), i'm getting error.

he're's complete stack trace: '`

info: starting servlet engine: apache tomcat/7.0.32 geg 19, 2013 9:53:08 pm org.apache.coyote.abstractprotocol start info: starting protocolhandler ["http-bio-8080"] geg 19, 2013 9:53:08 pm org.apache.coyote.abstractprotocol start info: starting protocolhandler ["ajp-bio-8009"] geg 19, 2013 9:53:08 pm org.apache.catalina.startup.catalina start info: server startup in 1786 ms geg 19, 2013 9:53:30 pm org.apache.catalina.realm.jaasrealm authenticate severe: unexpected error javax.security.auth.login.loginexception: no loginmodules configured gdialogin     @ javax.security.auth.login.logincontext.init(unknown source)     @ javax.security.auth.login.logincontext.<init>(unknown source)     @ org.apache.catalina.realm.jaasrealm.authenticate(jaasrealm.java:392)     @ org.apache.catalina.realm.jaasrealm.authenticate(jaasrealm.java:332)     @ org.apache.catalina.authenticator.basicauthenticator.authenticate(basicauthenticator.java:158)     @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:544)     @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:168)     @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:99)     @ org.apache.catalina.valves.accesslogvalve.invoke(accesslogvalve.java:929)     @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:118)     @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:407)     @ org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1002)     @ org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:585)     @ org.apache.tomcat.util.net.jioendpoint$socketprocessor.run(jioendpoint.java:312)     @ java.util.concurrent.threadpoolexecutor.runworker(unknown source)     @ java.util.concurrent.threadpoolexecutor$worker.run(unknown source)     @ java.lang.thread.run(unknown source)  geg 19, 2013 10:29:20 pm org.apache.catalina.realm.jaasrealm authenticate severe: unexpected error javax.security.auth.login.loginexception: no loginmodules configured gdialogin     @ javax.security.auth.login.logincontext.init(unknown source)     @ javax.security.auth.login.logincontext.<init>(unknown source)     @ org.apache.catalina.realm.jaasrealm.authenticate(jaasrealm.java:392)     @ org.apache.catalina.realm.jaasrealm.authenticate(jaasrealm.java:332)     @ org.apache.catalina.authenticator.basicauthenticator.authenticate(basicauthenticator.java:158)     @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:544)     @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:168)     @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:99)     @ org.apache.catalina.valves.accesslogvalve.invoke(accesslogvalve.java:929)     @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:118)     @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:407)     @ org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1002)     @ org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:585)     @ org.apache.tomcat.util.net.jioendpoint$socketprocessor.run(jioendpoint.java:312)     @ java.util.concurrent.threadpoolexecutor.runworker(unknown source)     @ java.util.concurrent.threadpoolexecutor$worker.run(unknown source)     @ java.lang.thread.run(unknown source) 

`

in context.xml:

<realm classname="org.apache.catalina.realm.jaasrealm"  appname="gdialogin" userclassnames="org.ktu.gdia.core.security.userprincipal" roleclassnames="org.ktu.gdia.core.security.roleprincipal" /> 

in jaas.config (i'm pretty sure tomcat finds correctly because added correct path arguments "run configurations" in eclipse):

  gdialogin {     org.ktu.gdia.core.security.gdialoginmodule required debug=true; }; 

i'm assuming there has wrong jaas.config...

my login module, not sure if need provide here, though, it's straight tutorial i've been following:

    package org.ktu.gdia.core.security;  import java.io.ioexception; import java.util.arraylist; import java.util.list; import java.util.map;  import javax.security.auth.subject; import javax.security.auth.callback.callback; import javax.security.auth.callback.callbackhandler; import javax.security.auth.callback.namecallback; import javax.security.auth.callback.passwordcallback; import javax.security.auth.callback.unsupportedcallbackexception; import javax.security.auth.login.loginexception; import javax.security.auth.spi.loginmodule;  import org.ktu.gdia.core.businesslogic.controllerfactory; import org.ktu.gdia.core.interfaces.securitycontrollerinterface;  public class gdialoginmodule implements loginmodule {    private callbackhandler handler;   private subject subject;   private userprincipal userprincipal;   private roleprincipal roleprincipal;   private string login;   private list<string> usergroups;    private securitycontrollerinterface securitycontroller;     @override     public void initialize(subject subject, callbackhandler callbackhandler,             map<string, ?> sharedstate, map<string, ?> options) {        try {          securitycontroller = controllerfactory.getinstance().getsecuritycontroller();      } catch (classnotfoundexception | instantiationexception             | illegalaccessexception e) {          throw new runtimeexception("failed initialize securitycontroller in " + this.getclass().getsimplename(), e);     }       handler = callbackhandler;       this.subject = subject;   }    @override   public boolean login() throws loginexception {      callback[] callbacks = new callback[2];     callbacks[0] = new namecallback("login");     callbacks[1] = new passwordcallback("password", true);      try {       handler.handle(callbacks);       string name = ((namecallback) callbacks[0]).getname();       string password = string.valueof(((passwordcallback) callbacks[1])           .getpassword());        // here validate credentials against       // authentication/authorization provider.       // can database, external ldap,        // web service, etc.       // tutorial checking if        // user "user123" , password "pass123"        if (securitycontroller.credentialsvalid(name, password)) {            // todo authenticate            login = name;           usergroups = new arraylist<string>();           usergroups.add("admin");           return true;        }        if (name != null &&           name.equals("user123") &&           password != null &&           password.equals("pass123")) {          // store username , roles         // fetched credentials provider         // used later in commit() method.         // tutorial hard coded         // "admin" role         login = name;         usergroups = new arraylist<string>();         usergroups.add("admin");         return true;       }        // if credentials not ok throw loginexception       throw new loginexception("authentication failed");      } catch (ioexception e) {       throw new loginexception(e.getmessage());     } catch (unsupportedcallbackexception e) {       throw new loginexception(e.getmessage());     }    }    @override   public boolean commit() throws loginexception {      userprincipal = new userprincipal(login);     subject.getprincipals().add(userprincipal);      if (usergroups != null && usergroups.size() > 0) {       (string groupname : usergroups) {         roleprincipal = new roleprincipal(groupname);         subject.getprincipals().add(roleprincipal);       }     }      return true;   }    @override   public boolean abort() throws loginexception {     return false;   }    @override   public boolean logout() throws loginexception {     subject.getprincipals().remove(userprincipal);     subject.getprincipals().remove(roleprincipal);     return true;   }  } 

edit: run configuration arguments in eclipse tomcat:

-dcatalina.base="d:\dropbox\eclipseworkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp7" -dcatalina.home="d:\servers\gentreeuploader_tomcat7" -dwtp.deploy="d:\dropbox\eclipseworkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp7\wtpwebapps" -djava.endorsed.dirs="d:\servers\gentreeuploader_tomcat7\endorsed" -djava.security.auth.login.config="d:\dropbox\eclipseworkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp7\conf\jaas.config" 

well? ideas?

according http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#jaasrealm

you should set login.config file java , tell tomcat find specifying location jvm, instance setting environment variable: java_opts=$java_opts -djava.security.auth.login.config=$catalina_base/conf/jaas.config

added

for windows open startup.bat add following line: set java_opts=%java_opts% -djava.security.auth.login.config=%catalina_home%/conf/jaas.config after okhome

e.g.

:okhome set java_opts=%java_opts% -djava.security.auth.login.config=%catalina_home%/conf/jaas.config set "executable=%catalina_home%\bin\catalina.bat" 

Comments

Popular posts from this blog

SPSS keyboard combination alters encoding -

Add new record to the table by click on the button in Microsoft Access -

javascript - jQuery .height() return 0 when visible but non-0 when hidden -