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

编程入门 行业动态 更新时间:2024-10-09 12:36:04
本文介绍了在创建新用户时自动生成带有用户名和随机密码的电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

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

I have created a class NewUserEmail to auto generate an email with username and password while creating a new user. I am able to create the password but whenever I am trying to log in with that password, its not logging in. I am not able to generate my mail. Please guide me and let me know what is wrong with my code:

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"; 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<String, Object> templateModel = new HashMap<String, Object>(); if (getEmail() != null && getEmail() != "") { Set<NodeRef> 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 = "<html> <body> <p> A new User has been created.</p>" + "<p>Hello, </p><p>Your username is " + getUserName() + " and your " + "password is " + getPassword() + "</p> " + "<p>We strongly advise you to change your password when you log in for the first time.</p>" + "Regards</body> </html>"; //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<NodeRef> 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); } } }

推荐答案

以下是一个可行的解决方案.

Below is a working solution.

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

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

<?xml version='1.0' encoding='UTF-8'?> <beans xmlns="www.springframework/schema/beans" xmlns:xsi="www.w3/2001/XMLSchema-instance" xsi:schemaLocation="www.springframework/schema/beans www.springframework/schema/beans/spring-beans-2.0.xsd"> <bean id="newUserEmail" class="demo.NewUserEmail"> <property name="policyComponent" ref="policyComponent"/> <property name="nodeService" ref="nodeService"/> <property name="personService" ref="personService"/> <property name="passwordGenerator" ref="passwordGenerator"/> <property name="authenticationService" ref="authenticationService"/> </bean> </beans>

demo.NewUserEmail.java:

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

更多推荐

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

本文发布于:2023-11-28 17:58:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1643399.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:新用户   自动生成   电子邮件   用户名   密码

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!