Autogeneración de correo electrónico con nombre de usuario y contraseña aleatoria en la creación de un nuevo usuario

Creé una clase NewUserEmail para generar automáticamente un correo electrónico con nombre de usuario y contraseña al crear un nuevo usuario. Puedo crear la contraseña, pero cada vez que trato de iniciar sesión con esa contraseña, no está ingresando. No puedo generar mi correo. Por favor, guíame y cuéntame cuál es el problema con mi código:

import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; import org.alfresco.repo.jscript.ClasspathScriptLocation; import org.alfresco.repo.node.NodeServicePolicies; import org.alfresco.repo.policy.JavaBehaviour; import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; import org.apache.log4j.Logger; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.mail.javamail.MimeMessagePreparator; public class NewUserEmail implements NodeServicePolicies.OnCreateNodePolicy { private Logger logger = Logger.getLogger(NewUserEmail.class); private PolicyComponent policyComponent; private NodeService nodeService; private PersonService personService; private ServiceRegistry serviceRegistry; protected String userName = null; protected String password = null; protected String email = null; protected String subject = null; protected String body = null; private static final String NEW_USER_EMAIL_TEMPLATE = "alfresco/module/demoact1-repo/template/new_user_email.ftl"; private static final String EMAIL_FROM = "no-reply@eisenvault.com"; public void init() { this.email = ""; this.userName = ""; this.password = ""; this.subject = "New User Alfresco"; this.body = ""; this.policyComponent.bindClassBehaviour( QName.createQName(NamespaceService.ALFRESCO_URI, "onCreateNode"), ContentModel.TYPE_PERSON, new JavaBehaviour(this, "ReportUser", org.alfresco.repo.policy.JavaBehaviour.NotificationFrequency.EVERY_EVENT) ); } public void onCreateNode(ChildAssociationRef childAssocRef) { if (logger.isInfoEnabled()) logger.info(" NewUserEmail Node create policy fired"); } public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; } public void setPolicyComponent(PolicyComponent policyComponent) { this.policyComponent = policyComponent; } public void setServiceRegistry(ServiceRegistry serviceRegistry) { this.serviceRegistry = serviceRegistry; } public String getSubject() { return this.subject; } public String getBody() { return this.body; } public String getEmail() { return this.email; } public String getUserName() { return this.userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public void ReportUser(ChildAssociationRef childAssocRef) { NodeRef personRef = childAssocRef.getChildRef(); this.userName = (String) this.nodeService.getProperty(personRef, ContentModel.PROP_USERNAME); this.email = (String) this.nodeService.getProperty(personRef, ContentModel.PROP_EMAIL); sendEmail(); } public void sendEmail() throws AlfrescoRuntimeException { Map templateModel = new HashMap(); if (getEmail() != null && getEmail() != "") { Set result = serviceRegistry.getPersonService().getPeopleFilteredByProperty(ContentModel.PROP_EMAIL, getEmail(), 1); if (result.size() == 1) { changePassword(getUserName()); ClasspathScriptLocation location = new ClasspathScriptLocation(NEW_USER_EMAIL_TEMPLATE); try { if (location.getInputStream() != null) { // Check that there is a template templateModel.put("userName", getUserName()); templateModel.put("password", getPassword()); this.body = serviceRegistry.getTemplateService().processTemplate("freemarker", NEW_USER_EMAIL_TEMPLATE, templateModel); } } catch (AlfrescoRuntimeException e) { // If template isn't found, email is constructed "manually" logger.error("Email Template not found " + NEW_USER_EMAIL_TEMPLATE); this.body = "  

A new User has been created.

" + "

Hello,

Your username is " + getUserName() + " and your " + "password is " + getPassword() + "

" + "

We strongly advise you to change your password when you log in for the first time.

" + "Regards "; //send(); } } } } protected void send() { MimeMessagePreparator mailPreparer = new MimeMessagePreparator() { public void prepare(MimeMessage mimeMessage) throws MessagingException { MimeMessageHelper message = new MimeMessageHelper(mimeMessage); message.setTo(getEmail()); message.setSubject(getSubject()); message.setText(getBody(), true); message.setFrom(EMAIL_FROM); } }; } public void changePassword(String password) { AuthenticationUtil.setRunAsUserSystem(); Set result = serviceRegistry.getPersonService().getPeopleFilteredByProperty(ContentModel.PROP_EMAIL, getEmail(), 1); if (result.size() == 1) { Object[] userNodeRefs = result.toArray(); NodeRef userNodeRef = (NodeRef) userNodeRefs[0]; String username = (String) serviceRegistry.getNodeService().getProperty(userNodeRef, ContentModel.PROP_USERNAME); // Generate random password String newPassword = Password.generatePassword(); char[] cadChars = new char[newPassword.length()]; for (int i = 0; i < newPassword.length(); i++) { cadChars[i] = newPassword.charAt(i); } serviceRegistry.getAuthenticationService().setAuthentication(username, newPassword.toCharArray()); setPassword(newPassword); System.out.println("Password is :" + newPassword); } } }

A continuación hay una solución de trabajo.

resource / alfresco / extension / new-user-email-context.xml:

 < ?xml version='1.0' encoding='UTF-8'?>          

demo.NewUserEmail.java:

 package demo; import org.alfresco.model.ContentModel; import org.alfresco.repo.node.NodeServicePolicies; import org.alfresco.repo.policy.*; import org.alfresco.repo.security.authentication.PasswordGenerator; import org.alfresco.service.cmr.repository.*; import org.alfresco.service.cmr.security.*; import org.alfresco.util.PropertyCheck; import org.springframework.beans.factory.InitializingBean; public class NewUserEmail implements NodeServicePolicies.OnCreateNodePolicy, InitializingBean { @Override public void onCreateNode(ChildAssociationRef childAssocRef) { notifyUser(childAssocRef); } private void notifyUser(ChildAssociationRef childAssocRef) { NodeRef personRef = childAssocRef.getChildRef(); // get the user name String username = (String) this.nodeService.getProperty( personRef, ContentModel.PROP_USERNAME); // generate the new password (Alfresco's rules) String newPassword = passwordGenerator.generatePassword(); // set the new password authenticationService.setAuthentication(username, newPassword.toCharArray()); // send default notification to the user personService.notifyPerson(username, newPassword); } private PolicyComponent policyComponent; private NodeService nodeService; private PersonService personService; private PasswordGenerator passwordGenerator; private MutableAuthenticationService authenticationService; public void setPolicyComponent(PolicyComponent policyComponent) { this.policyComponent = policyComponent; } public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; } public void setPersonService(PersonService personService) { this.personService = personService; } public void setPasswordGenerator(PasswordGenerator passwordGenerator) { this.passwordGenerator = passwordGenerator; } public void setAuthenticationService(AuthenticationService authenticationService) { if (authenticationService instanceof MutableAuthenticationService) { this.authenticationService = (MutableAuthenticationService) authenticationService; } } @Override public void afterPropertiesSet() throws Exception { PropertyCheck.mandatory(this, "policyComponent", policyComponent); PropertyCheck.mandatory(this, "nodeService", nodeService); PropertyCheck.mandatory(this, "passwordGenerator", passwordGenerator); PropertyCheck.mandatory(this, "authenticationService", authenticationService); PropertyCheck.mandatory(this, "personService", personService); this.policyComponent.bindClassBehaviour( NodeServicePolicies.OnCreateNodePolicy.QNAME, ContentModel.TYPE_PERSON, new JavaBehaviour(this, NodeServicePolicies.OnCreateNodePolicy.QNAME.getLocalName(), Behaviour.NotificationFrequency.TRANSACTION_COMMIT ) ); } }