package com.jilongda.applet.controller;
|
|
import com.jilongda.applet.model.TAppUser;
|
import com.jilongda.applet.service.TAppUserService;
|
import com.jilongda.applet.wx.body.resp.Code2SessionRespBody;
|
import com.jilongda.applet.wx.body.resq.Code2SessionResqBody;
|
import com.jilongda.applet.wx.pojo.AppletUserDecodeData;
|
import com.jilongda.applet.wx.pojo.AppletUserEncrypteData;
|
import com.jilongda.applet.wx.utils.WeixinProperties;
|
import com.jilongda.applet.wx.utils.WxAppletTools;
|
import com.jilongda.applet.wx.utils.WxUtils;
|
import com.jilongda.common.basic.ApiResult;
|
import com.jilongda.common.redis.RedisAutoTemplate;
|
import com.jilongda.common.security.SecurityUtils;
|
import com.jilongda.common.utils.WebUtils;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.security.authentication.AuthenticationManager;
|
import org.springframework.util.StringUtils;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.client.RestTemplate;
|
|
import java.util.Map;
|
|
/**
|
* <p>
|
* 会员表 前端控制器
|
* </p>
|
*
|
* @author xiaochen
|
* @since 2021-07-28
|
*/
|
@Slf4j
|
@Api(tags = "用户登录相关")
|
@RestController
|
@RequestMapping("/")
|
public class LoginController {
|
@Autowired
|
private SecurityUtils securityUtils;
|
@Autowired
|
private AuthenticationManager authenticationManager;
|
@Autowired
|
private RedisAutoTemplate redisAutoTemplate;
|
@Autowired
|
private TAppUserService appUserService;
|
@Autowired
|
private WeixinProperties wxConfig;
|
@Autowired
|
private RestTemplate wxRestTemplate;
|
|
@ApiOperation(value = "通过code获得openid,获取用户信息",tags = {"微信小程序登录"})
|
@PostMapping("/openIdByJsCode")
|
public ApiResult<Map<String, Object>> openIdByJsCode(@RequestBody AppletUserEncrypteData data) {
|
log.info("<<<<<<<<换取openid开始<<<<<<<<:{}", data.getCode());
|
WxAppletTools appletTools = new WxAppletTools(wxRestTemplate, wxConfig, redisAutoTemplate);
|
Code2SessionRespBody body = appletTools.getOpenIdByJscode2session(new Code2SessionResqBody().build(data.getCode()));
|
String openid = body.getOpenid();
|
String sessionKey = body.getSessionKey();
|
if(!StringUtils.hasLength(data.getEncryptedData()) || !StringUtils.hasLength(data.getIv())){
|
return ApiResult.failed("已拒绝授权",null);
|
}
|
AppletUserDecodeData appletUserDecodeData = WxUtils.encryptedData(data.getEncryptedData(), sessionKey, data.getIv());
|
appletUserDecodeData.setOpenId(openid);
|
TAppUser appUser = appUserService.wxLogin(appletUserDecodeData);
|
Map<String, Object> tokenInfos = securityUtils.login(openid, appUser, authenticationManager, TAppUser.class, 3);
|
return ApiResult.success(tokenInfos);
|
}
|
|
@ApiOperation("退出登录")
|
@GetMapping("logout")
|
public ApiResult<String> logout() {
|
boolean flag = securityUtils.invalidateToken(WebUtils.request());
|
if (flag) {
|
return ApiResult.success("退出成功");
|
}
|
return ApiResult.success();
|
}
|
|
|
|
|
}
|