Auto-generation of email with username and random password on creation of new user

前端 未结 1 1709
天涯浪人
天涯浪人 2020-11-30 15:46

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

相关标签:
1条回答
  • 2020-11-30 16:25

    Below is a working solution.

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

    <?xml version='1.0' encoding='UTF-8'?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/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:

    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
                    )
            );
        }
    
    
    }
    
    0 讨论(0)
提交回复
热议问题