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
Post a Comment