1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.ruoyi.auth.service.sms;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.ruoyi.common.core.utils.StringUtils;
 
/**
 * 短信发送占位实现
 *
 * 当前仅打印日志,不接入真实短信服务商;后续替换为真实实现时,
 * 新增一个 SmsSender 实现并移除本类 @Component 即可。
 *
 * @author hugray
 */
@Component
public class PlaceholderSmsSender implements SmsSender
{
    private static final Logger log = LoggerFactory.getLogger(PlaceholderSmsSender.class);
 
    /** 手机号脱敏时保留的前后位数 */
    private static final int PHONE_KEEP_PREFIX = 3;
 
    private static final int PHONE_KEEP_SUFFIX = 4;
 
    @Override
    public void send(String phone, String code)
    {
        // 占位实现:仅打印日志,手机号脱敏,禁止在日志中打印完整手机号
        log.info("[SMS_SEND] placeholder send, phone={}, code={}", maskPhone(phone), code);
    }
 
    /**
     * 手机号脱敏,形如 138****0000
     *
     * @param phone 手机号
     * @return 脱敏后的手机号
     */
    private String maskPhone(String phone)
    {
        if (StringUtils.isEmpty(phone) || phone.length() < PHONE_KEEP_PREFIX + PHONE_KEEP_SUFFIX)
        {
            return phone;
        }
        return phone.substring(0, PHONE_KEEP_PREFIX) + "****" + phone.substring(phone.length() - PHONE_KEEP_SUFFIX);
    }
}