欢迎进入Wiki » FAQ » 如何给用户设置随机的初始化密码、并发送邮件通知?

如何给用户设置随机的初始化密码、并发送邮件通知?

在2013-12-11 09:19上被李小翔修改
评论 (0) · 附件 (0) · 记录 · 信息

供稿人:刁隆

一般情况下,导入或单个注册的用户密码为系统参数 bropen.framework.security.user.default.password 的值,但是在一个新系统上线时,可能会有这样的需求:初始化时,要求给用户分别设置随机密码,并且发送邮件。

在产品添加这个功能前,可以使用管理员登录系统,通过开发者工具进入调试控制台(console),并适当修改、执行下面的代码即可:

/**
 * 提醒1:正式发送前,最好在测试环境好好测试一下
 * 提醒2:由于是发送的异步邮件,可以用管理员登录后,在系统监控中查看邮件的发送情况,以便处理异常
 */


// 系统URL
def url = GrailsUtils.getServerURL();
// 系统名称
def appname = GrailsUtils.message("index.app.shortname");
// 邮件标题
def mailSubject = "${appname}账号通知"
// 邮件正文落款
def signature = "XX集团XX部";

def asynchronousMailService = BeanUtils.getBean('asynchronousMailService');
def springSecurityService = BeanUtils.getBean('springSecurityService');

// 遍历可用员工列表,并发送邮件
Employee.withTransaction{
    List emps = Employee.availableList([result:'bean']);
   for ( Employee emp in emps ) {
       if ( emp.email && emp.user ) {
           // 生成随机密码
           String pwd = getRandomString(8);
            User user = emp.user;
            user.password = springSecurityService.encodePassword(pwd);
            user.save();
           // 生成邮件正文
           StringBuilder content = new StringBuilder();
            content << emp.name << ":\n"
            content << "\n请登录 " << appname << " 并及时修改密码。"
            content << "\n登录地址:" << url
            content << "\n用 户 名:" << user.username
            content << "\n初始密码:" << pwd
            content << "\n\n---------------------------------"
            content << "\n\n" << signature
            content << "\n" << DateUtils.formatDatetime(new Date())
           // 发送邮件通知:
           // 需配置 mail 相关的几个系统参数
           // 批量发送邮件比较多,注意邮件服务器的设置,不要把系统的帐号给自动屏蔽了!
           asynchronousMailService.sendMail {
                to      emp.email
                subject mailSubject
                body    content.toString()
                delete  true
           }
       }
   }
}

/**
 * 生成随机字符串
 * @param length 生成字符串的长度
 */

public String getRandomString(int length) {
    String base = "abcdefghijklmnopqrstuvwxyz0123456789";   //生成字符串从此序列中取
   Random random = new Random();
    StringBuffer sb = new StringBuffer();
   for (int i = 0; i < length; i++) {
       int number = random.nextInt(base.length());
        sb.append(base.charAt(number));
   }
   return sb.toString();
}
标签: BroFramework
在2013-12-11 09:19上被李小翔创建

Copyright © 2013 北京博瑞开源软件有限公司
京ICP备12048974号