如何给用户设置随机的初始化密码、并发送邮件通知?
李小翔
2013-12-11 09:19

内容列表

供稿人：刁隆
一般情况下，导入或单个注册的用户密码为系统参数 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();
}