扫码登录
This commit is contained in:
parent
8fed83cd15
commit
670ac0208c
|
|
@ -8,7 +8,8 @@ import com.mdd.front.service.ILoginService;
|
|||
import com.mdd.front.validate.login.RegisterValidate;
|
||||
import com.mdd.front.validate.login.ForgetPwdValidate;
|
||||
import com.mdd.front.validate.login.OaLoginValidate;
|
||||
import com.mdd.front.vo.LoginCodesVo;
|
||||
import com.mdd.front.validate.login.ScanLoginValidate;
|
||||
import com.mdd.front.vo.LoginUrlsVo;
|
||||
import com.mdd.front.vo.LoginTokenVo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
|
@ -99,10 +100,10 @@ public class LoginController {
|
|||
* @return AjaxResult<LoginCodesVo>
|
||||
*/
|
||||
@GetMapping("/codeUrl")
|
||||
public AjaxResult<LoginCodesVo> codeUrl(@RequestParam String url) {
|
||||
public AjaxResult<LoginUrlsVo> codeUrl(@RequestParam String url) {
|
||||
Assert.notNull(url, "url参数不能为空");
|
||||
|
||||
LoginCodesVo vo = new LoginCodesVo();
|
||||
LoginUrlsVo vo = new LoginUrlsVo();
|
||||
vo.setUrl(iLoginService.codeUrl(url));
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
|
@ -125,14 +126,27 @@ public class LoginController {
|
|||
*
|
||||
* @author fzr
|
||||
* @param session session
|
||||
* @return AjaxResult<Map<String, String>>
|
||||
* @return AjaxResult<LoginUrlsVo>
|
||||
*/
|
||||
@GetMapping("/getScanCode")
|
||||
public AjaxResult<Map<String, String>> getScanCode(HttpSession session) {
|
||||
public AjaxResult<LoginUrlsVo> getScanCode(HttpSession session) {
|
||||
String qrcodeUrl = iLoginService.getScanCode(session);
|
||||
Map<String, String> map = new LinkedHashMap<>();
|
||||
map.put("url", qrcodeUrl);
|
||||
return AjaxResult.success(map);
|
||||
LoginUrlsVo vo = new LoginUrlsVo();
|
||||
vo.setUrl(qrcodeUrl);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 扫码登录
|
||||
*
|
||||
* @author fzr
|
||||
* @param scanLoginValidate 参数
|
||||
* @return AjaxResult<Object>
|
||||
*/
|
||||
@PostMapping("/scanLogin")
|
||||
public AjaxResult<Object> scanLogin(@Validated @RequestBody ScanLoginValidate scanLoginValidate, HttpSession session) {
|
||||
iLoginService.scanLogin(scanLoginValidate, session);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.mdd.front.service;
|
|||
|
||||
import com.mdd.front.validate.login.RegisterValidate;
|
||||
import com.mdd.front.validate.login.ForgetPwdValidate;
|
||||
import com.mdd.front.validate.login.ScanLoginValidate;
|
||||
import com.mdd.front.vo.LoginTokenVo;
|
||||
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
|
@ -75,5 +76,18 @@ public interface ILoginService {
|
|||
*/
|
||||
void forgotPassword(ForgetPwdValidate forgetPwdValidate);
|
||||
|
||||
/**
|
||||
* 扫码链接
|
||||
*
|
||||
* @author fzr
|
||||
* @param session session
|
||||
* @return String
|
||||
*/
|
||||
String getScanCode(HttpSession session);
|
||||
|
||||
/**
|
||||
* 扫码登录
|
||||
*/
|
||||
void scanLogin(ScanLoginValidate scanLoginValidate, HttpSession session);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import com.mdd.front.config.FrontConfig;
|
|||
import com.mdd.front.service.ILoginService;
|
||||
import com.mdd.front.validate.login.RegisterValidate;
|
||||
import com.mdd.front.validate.login.ForgetPwdValidate;
|
||||
import com.mdd.front.validate.login.ScanLoginValidate;
|
||||
import com.mdd.front.vo.LoginTokenVo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.chanjar.weixin.common.api.WxConsts;
|
||||
|
|
@ -405,6 +406,44 @@ public class LoginServiceImpl implements ILoginService {
|
|||
return String.format(baseUrl, appId, redirectUrl, state);
|
||||
}
|
||||
|
||||
/**
|
||||
* 扫码登录
|
||||
*
|
||||
* @author fzr
|
||||
* @param scanLoginValidate 参数
|
||||
*/
|
||||
@Override
|
||||
public void scanLogin(ScanLoginValidate scanLoginValidate, HttpSession session) {
|
||||
Object o = RedisUtils.get("wechat-open-state-"+session.getId());
|
||||
if (StringUtils.isNull(o) || !o.toString().equals(scanLoginValidate.getState())) {
|
||||
throw new OperateException("二维码已失效或不存在,请重新操作");
|
||||
}
|
||||
|
||||
// 得到配置和授权临时票据code
|
||||
String code = scanLoginValidate.getCode();
|
||||
String appId = ConfigUtils.get("op_channel", "appId", "");
|
||||
String appSecret = ConfigUtils.get("op_channel", "appSecret", "");
|
||||
|
||||
//向认证服务器发送请求换取access_token
|
||||
String baseAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token" +
|
||||
"?appid=%s" +
|
||||
"&secret=%s" +
|
||||
"&code=%s" +
|
||||
"&grant_type=authorization_code";
|
||||
|
||||
String result = null;
|
||||
try {
|
||||
String accessTokenUrl = String.format(baseAccessTokenUrl, appId, appSecret, code);
|
||||
result = HttpUtils.sendGet(accessTokenUrl);
|
||||
} catch (Exception e) {
|
||||
throw new OperateException("获取access_token失败:"+e.getMessage());
|
||||
}
|
||||
|
||||
// 2、获取微信用户信息
|
||||
|
||||
// 3、存在则更新否则创建用户
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成登录Token
|
||||
*
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
package com.mdd.front.validate.login;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 网站扫码登录验证
|
||||
*/
|
||||
@Data
|
||||
public class ScanLoginValidate implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@NotNull(message = "code参数缺失")
|
||||
private String code;
|
||||
|
||||
@NotNull(message = "state参数缺失")
|
||||
private String state;
|
||||
|
||||
}
|
||||
|
|
@ -8,7 +8,7 @@ import java.io.Serializable;
|
|||
* 公众号跳转url
|
||||
*/
|
||||
@Data
|
||||
public class LoginCodesVo implements Serializable {
|
||||
public class LoginUrlsVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
Loading…
Reference in New Issue