在创建新用户时使用用户名和随机密码自动生成电子邮件

我创建了一个NewUserEmail类,用于在创建新用户时自动生成包含用户名和密码的电子邮件。 我能够创建密码,但每当我尝试使用该密码登录时,它都没有登录。我无法生成我的邮件。 请指导我,让我知道我的代码有什么问题:

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); } } }

以下是一个有效的解决方案

资源/户外/扩展/新用户电子邮件的context.xml:

           

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 ) ); } }