[Building Sakai] Using the PasswordService from within the user tool

Brian Baillargeon bbailla2 at uwo.ca
Fri Sep 21 14:22:05 PDT 2012


Hello,

Currently the user tool (sakai.createuser) adds users upon submitting 
the form. We want to ensure that we get the correct email addresses from 
our users, so we're trying to customize the tool to send the user an 
email with a validation token before their account gets created.

In doing this, my plan is to create a separate database table to 
temporarily store the information they've filled on the New User form 
until they've validated their email address. Since they insert their 
password, I need to encrypt it, and I found that BaseUserEdit encrypts 
passwords using org.sakaiproject.user.impl.PasswordService. So I'll 
store the user's inserted information including their encrypted 
password, and once the user has validated their email address I'll 
create their account with a random password and manually update their 
row in the SAKAI_USER table with the encrypted password from my table.

I'm having trouble using PasswordService from within the user project 
though.
So, to pull in PasswordService I have:
<dependency>
     <groupId>org.sakaiproject.kernel</groupId>
     <artifactId>sakai-kernel-impl</artifactId>
     <version>${sakai.kernel.version}</version>
</dependency>

I can compile a class that calls new PasswordService() without errors, 
but at runtime I'm getting:

2012-09-21 16:50:17,617  WARN http-8081-Processor25 
org.sakaiproject.cheftool.VelocityPortletPaneledAction - Exception 
calling method doSave java.lang.reflect.InvocationTargetException 
(Caused by java.lang.NoClassDefFoundError: 
org/sakaiproject/user/impl/PasswordService)
java.lang.reflect.InvocationTargetException
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:597)
         at 
org.sakaiproject.cheftool.VelocityPortletPaneledAction.actionDispatch(VelocityPortletPaneledAction.java:657)
         at 
org.sakaiproject.cheftool.VelocityPortletPaneledAction.processAction(VelocityPortletPaneledAction.java:555)
         at 
org.sakaiproject.cheftool.ToolServlet.doGet(ToolServlet.java:230)
         at 
org.sakaiproject.cheftool.VelocityPortletPaneledAction.doGet(VelocityPortletPaneledAction.java:1086)
         at 
org.sakaiproject.cheftool.ToolServlet.doPost(ToolServlet.java:154)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
         at 
org.sakaiproject.vm.ComponentServlet.service(ComponentServlet.java:56)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
         at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
         at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
         at 
org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:598)
         at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
         at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
         at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:659)
         at 
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:457)
         at 
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:359)
         at 
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:311)
         at 
org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:511)
         at 
org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1429)
         at 
org.sakaiproject.portal.charon.handlers.ToolHandler.doTool(ToolHandler.java:204)
         at 
org.sakaiproject.portal.charon.handlers.ToolHandler.doGet(ToolHandler.java:96)
         at 
org.sakaiproject.portal.charon.handlers.ToolHandler.doPost(ToolHandler.java:73)
         at 
org.sakaiproject.portal.charon.SkinnableCharonPortal.doPost(SkinnableCharonPortal.java:1224)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
         at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
         at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
         at 
org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:659)
         at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
         at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
         at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
         at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
         at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
         at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
         at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
         at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
         at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
         at 
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
         at 
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
         at 
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
         at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
         at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NoClassDefFoundError: 
org/sakaiproject/user/impl/PasswordService
         at 
org.sakaiproject.user.uservalidation.model.ValidatablePersonHibernateImpl.setPassword(ValidatablePersonHibernateImpl.java:70)
         at 
org.sakaiproject.user.tool.UsersAction.readUserForm(UsersAction.java:966)
         at 
org.sakaiproject.user.tool.UsersAction.doSave(UsersAction.java:665)
         ... 46 more
Caused by: java.lang.ClassNotFoundException: 
org.sakaiproject.user.impl.PasswordService
         at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
         at java.security.AccessController.doPrivileged(Native Method)
         at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
         at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
         ... 49 more

Does anybody have any suggestions as to how I can get PasswordService to 
work in this project?

For reference, the source code can be found at 
https://source.sakaiproject.org/svn/msub/uwo.ca/user/trunk/

Thanks,
Brian
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/sakai-dev/attachments/20120921/5a5ab667/attachment.html 


More information about the sakai-dev mailing list