token修改及实验课程
parent
692f6225a3
commit
8f198ea261
|
|
@ -52,4 +52,10 @@ public interface RemoteUserService extends InnerRemoteUserService
|
|||
*/
|
||||
@PutMapping("/user/recordlogin")
|
||||
public R<Boolean> recordUserLogin(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 同步至go框架
|
||||
*/
|
||||
@PostMapping("/user/syncGO")
|
||||
public R<Boolean> syncGO(@RequestBody SysUser sysUser);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,6 +68,11 @@ public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserServ
|
|||
return R.fail("记录用户登录信息失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<Boolean> syncGO(SysUser sysUser) {
|
||||
return R.fail("同步用户信息至GO失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public R<LoginUser> edit_Inner(@NotNull LoginUser user, @NotNull String source) {
|
||||
|
|
|
|||
|
|
@ -12,6 +12,20 @@ public class SecurityConstants
|
|||
*/
|
||||
public static final String DETAILS_USER_ID = "user_id";
|
||||
|
||||
/**
|
||||
* 用户ID字段
|
||||
*/
|
||||
public static final String DETAILS_SUB = "sub";
|
||||
|
||||
/**
|
||||
* 用户ID字段
|
||||
*/
|
||||
public static final String DETAILS_IAT= "iat";
|
||||
/**
|
||||
* 用户ID字段
|
||||
*/
|
||||
public static final String DETAILS_EXP= "exp";
|
||||
|
||||
/**
|
||||
* 用户名字段
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,13 +1,18 @@
|
|||
package com.ruoyi.common.core.utils;
|
||||
|
||||
import java.util.Base64;
|
||||
import java.util.Map;
|
||||
import com.ruoyi.common.core.constant.SecurityConstants;
|
||||
import com.ruoyi.common.core.constant.TokenConstants;
|
||||
import com.ruoyi.common.core.exception.ServiceException;
|
||||
import com.ruoyi.common.core.text.Convert;
|
||||
import io.jsonwebtoken.Claims;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import io.jsonwebtoken.SignatureAlgorithm;
|
||||
|
||||
import javax.naming.AuthenticationException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* Jwt工具类
|
||||
*
|
||||
|
|
@ -15,7 +20,7 @@ import io.jsonwebtoken.SignatureAlgorithm;
|
|||
*/
|
||||
public class JwtUtils
|
||||
{
|
||||
public static String secret = TokenConstants.SECRET;
|
||||
public static String secret = Base64.getEncoder().encodeToString(TokenConstants.SECRET.getBytes()) ;
|
||||
|
||||
/**
|
||||
* 从数据声明生成令牌
|
||||
|
|
|
|||
|
|
@ -1,9 +1,14 @@
|
|||
package com.ruoyi.common.security.service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import io.jsonwebtoken.Claims;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import io.jsonwebtoken.impl.DefaultClaims;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
|
@ -61,6 +66,10 @@ public class TokenService
|
|||
claimsMap.put(SecurityConstants.USER_KEY, token);
|
||||
claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
|
||||
claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName);
|
||||
claimsMap.put(SecurityConstants.DETAILS_SUB,userId);
|
||||
int now = Math.toIntExact(System.currentTimeMillis() / 1000);
|
||||
claimsMap.put(SecurityConstants.DETAILS_IAT,now);
|
||||
claimsMap.put(SecurityConstants.DETAILS_EXP,now+TOKEN_EXPIRE_TIME*60);
|
||||
|
||||
// 接口返回信息
|
||||
Map<String, Object> rspMap = new HashMap<String, Object>();
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ public class AuthFilter implements GlobalFilter, Ordered
|
|||
{
|
||||
ServerHttpRequest request = exchange.getRequest();
|
||||
ServerHttpRequest.Builder mutate = request.mutate();
|
||||
|
||||
String url = request.getURI().getPath();
|
||||
// 跳过不需要验证的路径
|
||||
if (StringUtils.matches(url, ignoreWhite.getWhites()))
|
||||
|
|
@ -56,11 +55,19 @@ public class AuthFilter implements GlobalFilter, Ordered
|
|||
{
|
||||
return unauthorizedResponse(exchange, "令牌不能为空");
|
||||
}
|
||||
Claims claims = JwtUtils.parseToken(token);
|
||||
/*Claims claims = JwtUtils.parseToken(token);
|
||||
if (claims == null)
|
||||
{
|
||||
return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
|
||||
}
|
||||
}*/
|
||||
Claims claims;
|
||||
try{
|
||||
claims = JwtUtils.parseToken(token);
|
||||
if (claims == null)
|
||||
return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
|
||||
}catch (Exception e){
|
||||
return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
|
||||
}
|
||||
String userkey = JwtUtils.getUserKey(claims);
|
||||
boolean islogin = redisService.hasKey(getTokenKey(userkey));
|
||||
if (!islogin)
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ public class GatewayExceptionHandler implements ErrorWebExceptionHandler
|
|||
}
|
||||
|
||||
String msg;
|
||||
|
||||
if (ex instanceof NotFoundException)
|
||||
{
|
||||
msg = "服务未找到";
|
||||
|
|
|
|||
|
|
@ -27,8 +27,10 @@ public class LiveTask {
|
|||
public void CourseSmsNotice(){
|
||||
List<ScClassUserInfo> list = scClassUserInfoMapper.waitNoticeCourseUser();
|
||||
list.forEach(item->{
|
||||
log.info("发送打卡提醒",item.getUserId(),item.getNickName(),item.getPhonenumber());
|
||||
smsAliyuncs.sendStudyNoticeSms(item.getPhonenumber());
|
||||
if (item.getPhonenumber() != null && !item.getPhonenumber().trim().isEmpty()){
|
||||
log.info("发送打卡提醒 {} {} {}",item.getUserId(),item.getNickName(),item.getPhonenumber());
|
||||
smsAliyuncs.sendStudyNoticeSms(item.getPhonenumber());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -166,6 +166,16 @@ public class SysUserController extends BaseController
|
|||
return R.ok(userService.updateUserProfile(sysUser));
|
||||
}
|
||||
|
||||
/**
|
||||
*记录用户登录IP地址和登录时间
|
||||
*/
|
||||
@InnerAuth
|
||||
@PutMapping("/syncGO")
|
||||
public R<Boolean> syncGO(@RequestBody SysUser sysUser)
|
||||
{
|
||||
return R.ok(userService.syncGO(sysUser));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
*
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
package com.ruoyi.system.domain;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SyncGoUser {
|
||||
private Integer userId;
|
||||
private String nickname;
|
||||
private String username;
|
||||
private String mobile;
|
||||
private String lastIp;
|
||||
private String remark;
|
||||
private String avatar;
|
||||
private Integer status;
|
||||
}
|
||||
|
|
@ -170,6 +170,14 @@ public interface ISysUserService
|
|||
*/
|
||||
public boolean updateUserProfile(SysUser user);
|
||||
|
||||
/**
|
||||
* 同步用户基本信息
|
||||
*
|
||||
* @param user 用户信息
|
||||
* @return 结果
|
||||
*/
|
||||
public boolean syncGO(SysUser user);
|
||||
|
||||
/**
|
||||
* 修改用户头像
|
||||
*
|
||||
|
|
|
|||
|
|
@ -6,12 +6,17 @@ import java.util.Objects;
|
|||
import java.util.stream.Collectors;
|
||||
import javax.validation.Validator;
|
||||
|
||||
import cn.hutool.system.UserInfo;
|
||||
import com.github.pagehelper.Page;
|
||||
import com.ruoyi.system.api.domain.KSysUserAccount;
|
||||
import com.ruoyi.system.domain.SyncGoUser;
|
||||
import com.ruoyi.system.service.IKSysUserService;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
|
@ -35,6 +40,7 @@ import com.ruoyi.system.mapper.SysUserRoleMapper;
|
|||
import com.ruoyi.system.service.ISysConfigService;
|
||||
import com.ruoyi.system.service.ISysDeptService;
|
||||
import com.ruoyi.system.service.ISysUserService;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
/**
|
||||
* 用户 业务层处理
|
||||
|
|
@ -44,6 +50,11 @@ import com.ruoyi.system.service.ISysUserService;
|
|||
@Service
|
||||
public class SysUserServiceImpl implements ISysUserService
|
||||
{
|
||||
@Value("${go.host}")
|
||||
private String goHost;
|
||||
@Value("${go.accessKey}")
|
||||
private String accessKey;
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
|
||||
|
||||
@Autowired
|
||||
|
|
@ -73,6 +84,7 @@ public class SysUserServiceImpl implements ISysUserService
|
|||
@Autowired
|
||||
protected Validator validator;
|
||||
|
||||
|
||||
/**
|
||||
* 根据条件分页查询用户列表
|
||||
*
|
||||
|
|
@ -308,7 +320,9 @@ public class SysUserServiceImpl implements ISysUserService
|
|||
@Override
|
||||
public boolean registerUser(SysUser user)
|
||||
{
|
||||
return userMapper.insertUser(user) > 0;
|
||||
boolean res = userMapper.insertUser(user) > 0;
|
||||
this.syncGO(user);
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -335,6 +349,7 @@ public class SysUserServiceImpl implements ISysUserService
|
|||
kSysUserService.updateSysUserAccount(user.getSysUserAccount());
|
||||
}
|
||||
}
|
||||
this.syncGO(user);
|
||||
return userMapper.updateUser(user);
|
||||
}
|
||||
|
||||
|
|
@ -361,6 +376,7 @@ public class SysUserServiceImpl implements ISysUserService
|
|||
@Override
|
||||
public int updateUserStatus(SysUser user)
|
||||
{
|
||||
this.syncGO(user);
|
||||
return userMapper.updateUser(user);
|
||||
}
|
||||
|
||||
|
|
@ -373,9 +389,39 @@ public class SysUserServiceImpl implements ISysUserService
|
|||
@Override
|
||||
public boolean updateUserProfile(SysUser user)
|
||||
{
|
||||
this.syncGO(user);
|
||||
return userMapper.updateUser(user) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步用户基本信息
|
||||
*
|
||||
* @param user 用户信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public boolean syncGO(SysUser user){
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
String url = goHost + "/api/v2/mini/user/zkSyncUser/"+accessKey;
|
||||
SyncGoUser syncGoUser = new SyncGoUser();
|
||||
syncGoUser.setUserId(Math.toIntExact(user.getUserId()));
|
||||
syncGoUser.setNickname(user.getNickName());
|
||||
syncGoUser.setUsername(user.getUserName());
|
||||
syncGoUser.setMobile(user.getPhonenumber());
|
||||
syncGoUser.setLastIp(user.getLoginIp());
|
||||
syncGoUser.setRemark(user.getRemark());
|
||||
syncGoUser.setAvatar(user.getAvatar());
|
||||
syncGoUser.setStatus(Objects.equals(user.getStatus(), "正常") ?0:1);
|
||||
ResponseEntity<String> response = restTemplate.postForEntity(url, syncGoUser, String.class);
|
||||
// 检查响应状态码
|
||||
if (response.getStatusCode().is2xxSuccessful()) {
|
||||
System.out.println("响应内容:" + response.getBody());
|
||||
} else {
|
||||
System.out.println("请求失败,状态码:" + response.getStatusCode());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改用户头像
|
||||
*
|
||||
|
|
|
|||
|
|
@ -141,7 +141,9 @@ open class InnerSysUserController : BaseController() {
|
|||
originUser.avatar = targetUser.avatar ?: originUser.avatar
|
||||
originUser.sex = targetUser.sex ?: originUser.sex
|
||||
originUser.updateBy = originUser.userName
|
||||
originUser.sysUserAccount = loginUser.sysUser.sysUserAccount.apply { this.userId = originUser.userId }
|
||||
if (loginUser.sysUser.sysUserAccount != null){
|
||||
originUser.sysUserAccount = loginUser.sysUser.sysUserAccount.apply { this.userId = originUser.userId }
|
||||
}
|
||||
userService.updateUser(originUser)
|
||||
// 更新缓存用户信息
|
||||
tokenService.setLoginUser(loginUser)
|
||||
|
|
|
|||
Loading…
Reference in New Issue