spring boot 集成短信登陆,微信,qq授权登陆

264 阅读2分钟

下面是一个示例的Spring Boot项目,集成了短信登录和微信、QQ授权登录的功能。

首先,你需要在短信服务商那里注册并获取短信服务的API密钥。然后,你还需要在微信开放平台和QQ开放平台上创建应用,并获取相应的应用ID和密钥。

后端代码

// 导入所需的依赖
// 短信服务的依赖
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.5.3</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
    <version>1.1.0</version>
</dependency>

// 微信授权登录的依赖
<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>weixin-java-mp</artifactId>
    <version>3.8.0</version>
</dependency>

// QQ授权登录的依赖
<dependency>
    <groupId>me.zhyd.oauth</groupId>
    <artifactId>JustAuth</artifactId>
    <version>1.15.2</version>
</dependency>

// 创建短信服务的配置类
@Configuration
public class SmsConfig {
    @Value("${aliyun.accessKey}")
    private String accessKey;

    @Value("${aliyun.accessKeySecret}")
    private String accessKeySecret;

    @Value("${aliyun.sms.signName}")
    private String signName;

    @Value("${aliyun.sms.templateCode}")
    private String templateCode;

    @Bean
    public IAcsClient acsClient() {
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKey, accessKeySecret);
        return new DefaultAcsClient(profile);
    }

    @Bean
    public SmsService smsService() {
        return new SmsServiceImpl(acsClient(), signName, templateCode);
    }
}

// 创建短信服务的接口
public interface SmsService {
    void sendSms(String phone, String code);
}

// 实现短信服务的接口
@Service
public class SmsServiceImpl implements SmsService {
    private final IAcsClient acsClient;
    private final String signName;
    private final String templateCode;

    public SmsServiceImpl(IAcsClient acsClient, String signName, String templateCode) {
        this.acsClient = acsClient;
        this.signName = signName;
        this.templateCode = templateCode;
    }

    @Override
    public void sendSms(String phone, String code) {
        // 使用acsClient发送短信
        // ...
    }
}

// 创建微信授权登录的配置类
@Configuration
public class WeChatConfig {
    @Value("${wechat.appId}")
    private String appId;

    @Value("${wechat.appSecret}")
    private String appSecret;

    @Bean
    public WxMpService wxMpService() {
        WxMpInMemoryConfigStorage config = new WxMpInMemoryConfigStorage();
        config.setAppId(appId);
        config.setSecret(appSecret);
        WxMpService wxMpService = new WxMpServiceImpl();
        wxMpService.setWxMpConfigStorage(config);
        return wxMpService;
    }
}

// 创建QQ授权登录的配置类
@Configuration
public class QQConfig {
    @Value("${qq.appId}")
    private String appId;

    @Value("${qq.appSecret}")
    private String appSecret;

    @Bean
    public AuthRequest authRequest() {
        return new AuthQqRequest(AuthConfig.builder()
                .clientId(appId)
                .clientSecret(appSecret)
                .redirectUri("http://your-callback-url")
                .build());
    }
}

// 创建登录控制器
@RestController
public class LoginController {
    private final SmsService smsService;
    private final WxMpService wxMpService;
    private final AuthRequest authRequest;

    public LoginController(SmsService smsService, WxMpService wxMpService, AuthRequest authRequest) {
        this.smsService = smsService;
        this.wxMpService = wxMpService;
        this.authRequest = authRequest;
    }

    // 短信登录接口
    @PostMapping("/login/sms")
    public void loginBySms(@RequestParam("phone") String phone, @RequestParam("code") String code) {
        // 验证短信验证码
        // ...

        // 登录成功
        // ...
    }

    // 微信授权登录接口
    @GetMapping("/login/wechat")
    public String loginByWechat(@RequestParam("code") String code) {
        // 根据code获取用户的openid
        // ...

        // 登录成功
        // ...
    }

    // QQ授权登录接口
    @GetMapping("/login/qq")
    public String loginByQQ(@RequestParam("code") String code) {
        // 根据code获取用户的openid
        // ...

        // 登录成功
        // ...
    }
}

前端代码

<!-- 短信登录表单 -->
<form action="/login/sms" method="post">
    <input type="text" name="phone" placeholder="手机号">
    <input type="text" name="code" placeholder="验证码">
    <button type="submit">登录</button>
</form>

<!-- 微信授权登录按钮 -->
<a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect">微信登录</a>

<!-- QQ授权登录按钮 -->
<a href="https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=APPID&redirect_uri=REDIRECT_URI&state=STATE">QQ登录</a>

请注意替换代码中的占位符,例如短信服务商的API密钥、微信和QQ开放平台的应用ID和密钥,以及前端代码中的回调URL等。