扫码登录二维码

This commit is contained in:
TinyAnts 2022-12-20 11:55:21 +08:00
parent 444ea6b4cb
commit 43983deb48
4 changed files with 50 additions and 0 deletions

View File

@ -28,6 +28,8 @@ public class FrontConfig {
"/api/article/category", "/api/article/category",
"/api/article/detail", "/api/article/detail",
"/api/article/list", "/api/article/list",
"/api/login/getScanCode"
}; };
} }

View File

@ -11,6 +11,10 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
/** /**
@ -104,4 +108,12 @@ public class LoginController {
return AjaxResult.success(); return AjaxResult.success();
} }
@GetMapping("/getScanCode")
public AjaxResult<Map<String, String>> getScanCode(HttpSession session) {
String qrcodeUrl = iLoginService.getScanCode(session);
Map<String, String> map = new LinkedHashMap<>();
map.put("url", qrcodeUrl);
return AjaxResult.success(map);
}
} }

View File

@ -3,6 +3,7 @@ package com.mdd.front.service;
import com.mdd.front.validate.UserRegisterValidate; import com.mdd.front.validate.UserRegisterValidate;
import com.mdd.front.vo.LoginTokenVo; import com.mdd.front.vo.LoginTokenVo;
import javax.servlet.http.HttpSession;
import java.util.Map; import java.util.Map;
/** /**
@ -71,4 +72,5 @@ public interface ILoginService {
*/ */
void forgotPassword(Map<String, String> params); void forgotPassword(Map<String, String> params);
String getScanCode(HttpSession session);
} }

View File

@ -17,6 +17,7 @@ import com.mdd.front.config.FrontConfig;
import com.mdd.front.service.ILoginService; import com.mdd.front.service.ILoginService;
import com.mdd.front.validate.UserRegisterValidate; import com.mdd.front.validate.UserRegisterValidate;
import com.mdd.front.vo.LoginTokenVo; import com.mdd.front.vo.LoginTokenVo;
import jdk.nashorn.internal.runtime.regexp.joni.Config;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts; import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken; import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
@ -27,6 +28,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map; import java.util.Map;
/** /**
@ -414,6 +418,36 @@ public class LoginServiceImpl implements ILoginService {
userMapper.updateById(user); userMapper.updateById(user);
} }
@Override
public String getScanCode(HttpSession session) {
// 获取AppId
String appId = ConfigUtils.get("op_channel", "appId", "");
// 微信开放平台授权
String baseUrl = "https://open.weixin.qq.com/connect/qrconnect" +
"?appid=%s" +
"&redirect_uri=%s" +
"&response_type=code" +
"&scope=snsapi_login" +
"&state=%s" +
"#wechat_redirect";
// 回调地址
String redirectUrl = "https://www.baidu.com/";
try {
redirectUrl = URLEncoder.encode(redirectUrl, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new OperateException(e.getMessage());
}
// 防止csrf攻击
String state = ToolsUtils.makeUUID().replaceAll("-", "");
RedisUtils.set("wechat-open-state-"+session.getId(), state, 600);
//生成qrcodeUrl
return String.format(baseUrl, appId, redirectUrl, state);
}
/** /**
* 生成用户编号 * 生成用户编号
* *