dev_xd
lijun 2024-10-16 00:24:58 +08:00
commit c55ea4a88e
8 changed files with 144 additions and 24 deletions

View File

@ -85,6 +85,20 @@ public class TokenController
return R.ok(maOpenId); return R.ok(maOpenId);
} }
/**
*
* @param form
* @return
*/
@PostMapping("wxLogin")
public R<?> wxLogin(@RequestBody LoginBody form)
{
// 用户登录
LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
// 获取登录token
return R.ok(tokenService.createMobileToken(userInfo));
}
/** /**
* *
* @param body * @param body
@ -96,7 +110,7 @@ public class TokenController
// 微信用户登录 // 微信用户登录
LoginUser userInfo = sysLoginService.maLogin(body); LoginUser userInfo = sysLoginService.maLogin(body);
// 获取登录token // 获取登录token
return R.ok(tokenService.createToken(userInfo)); return R.ok(tokenService.createMobileToken(userInfo));
} }
/** /**
@ -197,7 +211,7 @@ public class TokenController
return R.ok(); return R.ok();
} }
@PostMapping("refresh") @GetMapping("refresh")
public R<?> refresh(HttpServletRequest request) public R<?> refresh(HttpServletRequest request)
{ {
LoginUser loginUser = tokenService.getLoginUser(request); LoginUser loginUser = tokenService.getLoginUser(request);
@ -207,7 +221,20 @@ public class TokenController
tokenService.refreshToken(loginUser); tokenService.refreshToken(loginUser);
return R.ok(); return R.ok();
} }
return R.ok(); return R.fail();
}
@GetMapping("refreshMobile")
public R<?> refreshMobile(HttpServletRequest request)
{
LoginUser loginUser = sysLoginService.wxLogin(SecurityUtils.getUsername());
if (StringUtils.isNotNull(loginUser))
{
// 刷新令牌有效期
tokenService.refreshToken(loginUser);
return R.ok();
}
return R.fail();
} }
@PostMapping("register") @PostMapping("register")

View File

@ -142,6 +142,54 @@ public class SysLoginService
return Convert.toStr(phoneResult.get("phoneNumber")); return Convert.toStr(phoneResult.get("phoneNumber"));
} }
/**
*
*/
public LoginUser wxLogin(String username)
{
// 查询用户信息
R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
throw new ServiceException("登录用户:" + username + " 不存在");
}
if (R.FAIL == userResult.getCode())
{
throw new ServiceException(userResult.getMsg());
}
LoginUser userInfo = userResult.getData();
SysUser user = userResult.getData().getSysUser();
if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
}
if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
throw new ServiceException("对不起,您的账号:" + username + " 已停用");
}
// 补充用户项目信息
if(Objects.nonNull(user.getActiveComId())){
userInfo.setProjectDeptId(user.getActiveComId());
}
if(Objects.nonNull(user.getActiveComName())){
userInfo.setProjectDeptName(user.getActiveComName());
}
if(Objects.nonNull(user.getActiveProjectId())){
userInfo.setProjectId(user.getActiveProjectId());
}
if(Objects.nonNull(user.getActiveProjectName())){
userInfo.setProjectName(user.getActiveProjectName());
}
return userInfo;
}
/** /**
* *
*/ */

View File

@ -4,6 +4,10 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import com.yanzhu.common.core.constant.Constants;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.yanzhu.common.core.constant.CacheConstants; import com.yanzhu.common.core.constant.CacheConstants;
@ -65,6 +69,33 @@ public class TokenService
return rspMap; return rspMap;
} }
/**
*
*/
public Map<String, Object> createMobileToken(LoginUser loginUser)
{
String token = IdUtils.fastUUID();
Long userId = loginUser.getSysUser().getUserId();
String userName = loginUser.getSysUser().getUserName();
loginUser.setToken(token);
loginUser.setUserid(userId);
loginUser.setUsername(userName);
loginUser.setIpaddr(IpUtils.getIpAddr());
refreshMobileToken(loginUser);
// Jwt存储信息
Map<String, Object> claimsMap = new HashMap<String, Object>();
claimsMap.put(SecurityConstants.USER_KEY, token);
claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName);
// 接口返回信息
Map<String, Object> rspMap = new HashMap<String, Object>();
rspMap.put("access_token", JwtUtils.createToken(claimsMap));
rspMap.put("expires_in", expireTime);
return rspMap;
}
/** /**
* *
* *
@ -162,6 +193,21 @@ public class TokenService
redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
} }
/**
* &&
*
* @param loginUser
*/
public void refreshMobileToken(LoginUser loginUser)
{
loginUser.setLoginTime(System.currentTimeMillis());
long exTime = (expireTime * MILLIS_MINUTE) * 9999;
loginUser.setExpireTime(loginUser.getLoginTime() + exTime);
// 根据uuid将loginUser缓存
String userKey = getTokenKey(loginUser.getToken());
redisService.setCacheObject(userKey, loginUser, expireTime * 9999, TimeUnit.MINUTES);
}
private String getTokenKey(String token) private String getTokenKey(String token)
{ {
return ACCESS_TOKEN + token; return ACCESS_TOKEN + token;

View File

@ -134,7 +134,7 @@ public class SysUserUniopenController extends BaseController
* *
*/ */
@InnerAuth @InnerAuth
@GetMapping("/getMaPhoneNumber") @PostMapping("/getMaPhoneNumber")
public R<Map<String, Object>> getMaPhoneNumber(@RequestBody WxMaLoginBody body) { public R<Map<String, Object>> getMaPhoneNumber(@RequestBody WxMaLoginBody body) {
try { try {
// 调用解密方法获取手机号 // 调用解密方法获取手机号

View File

@ -9,9 +9,9 @@ export function getCodeImg() {
} }
// 登录方法 // 登录方法
export function login(data) { export function wxLogin(data) {
return request({ return request({
url: '/wxApi/login', url: '/auth/wxLogin',
method: 'post', method: 'post',
data: data, data: data,
}) })
@ -29,7 +29,7 @@ export function getMaOpenId(data) {
// 登录方法 // 登录方法
export function maLogin(data) { export function maLogin(data) {
return request({ return request({
url: '/maLogin', url: '/auth/maLogin',
method: 'post', method: 'post',
data: data, data: data,
}) })
@ -47,15 +47,15 @@ export function updatePwd(data) {
// 用户退出方法 // 用户退出方法
export function loginOut() { export function loginOut() {
return request({ return request({
'url': '/wxApi/loginOut', 'url': '/auth/logout',
'method': 'get' 'method': 'get'
}) })
} }
// 刷线用户信息 // 刷线用户信息
export function refreshUser() { export function refreshMobileToken() {
return request({ return request({
'url': '/wxApi/refreshUserInfo', 'url': '/auth/refreshMobile',
'method': 'get' 'method': 'get'
}) })
} }

View File

@ -3,5 +3,5 @@ module.exports = {
timeout: 60000, timeout: 60000,
appId: "wx2350a5efb3f28e66", appId: "wx2350a5efb3f28e66",
baseUrl: 'http://127.0.0.1:8080', baseUrl: 'http://127.0.0.1:8080',
noSecuritys:['/code','/auth/login','/auth/getMaOpenId','/auth/getMaPhoneNumber','/auth/maLogin'] noSecuritys:['/code','/auth/wxLogin','/auth/getMaOpenId','/auth/getMaPhoneNumber','/auth/maLogin']
}; };

View File

@ -7,11 +7,11 @@ import {
setSessionKey, setSessionKey,
} from '../../utils/auth' } from '../../utils/auth'
import { import {
login, wxLogin,
maLogin, maLogin,
getCodeImg, getCodeImg,
getMaOpenId, getMaOpenId,
refreshUser, refreshMobileToken,
} from '../../api/login' } from '../../api/login'
const app = getApp(); const app = getApp();
@ -53,7 +53,7 @@ Page({
if (getToken()) { if (getToken()) {
console.log("Authorization...{}", getToken()); console.log("Authorization...{}", getToken());
//刷新权限信息 //刷新权限信息
refreshUser().then(res => { refreshMobileToken().then(res => {
if (res.code == '200') { if (res.code == '200') {
wx.redirectTo({ wx.redirectTo({
url: '../index/index', url: '../index/index',
@ -114,7 +114,7 @@ Page({
//启动蒙版 //启动蒙版
let that = this; let that = this;
//发送请求 //发送请求
login({ wxLogin({
"username": username, "username": username,
"password": password, "password": password,
"code": code, "code": code,
@ -140,18 +140,17 @@ Page({
iv: e.detail.iv, iv: e.detail.iv,
encryptedData: e.detail.encryptedData encryptedData: e.detail.encryptedData
} }
maLogin({}) maLogin(data).then(res =>{
setToken(res.access_token)
//跳转页面
wx.redirectTo({
url: '../index/index',
})
})
}else{ }else{
//用户决绝授权 //用户决绝授权
app.toast("请允许微信手机号一键登录"); app.toast("请允许微信手机号一键登录");
} }
maLogin(data).then(res =>{
setToken(res.access_token)
//跳转页面
wx.redirectTo({
url: '../index/index',
})
})
}, },
}) })

View File

@ -28,7 +28,7 @@ export function register(data) {
export function refreshToken() { export function refreshToken() {
return request({ return request({
url: '/auth/refresh', url: '/auth/refresh',
method: 'post' method: 'get'
}) })
} }