Browse Source

登录接口修改

master
yinzuomei 6 years ago
parent
commit
59011c7616
  1. 16
      epmet-auth/src/main/java/com/epmet/controller/LoginController.java
  2. 27
      epmet-auth/src/main/java/com/epmet/jwt/JwtTokenUtils.java
  3. 2
      epmet-auth/src/main/java/com/epmet/redis/CaptchaRedis.java
  4. 9
      epmet-auth/src/main/java/com/epmet/service/LoginService.java
  5. 2
      epmet-auth/src/main/java/com/epmet/service/impl/CaptchaServiceImpl.java
  6. 27
      epmet-auth/src/main/java/com/epmet/service/impl/LoginServiceImpl.java
  7. 21
      epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/dto/TokenDto.java
  8. 40
      epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/util/CpUserDetailRedis.java
  9. 20
      epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/util/TokenUtil.java
  10. 6
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java

16
epmet-auth/src/main/java/com/epmet/controller/LoginController.java

@ -3,6 +3,7 @@ package com.epmet.controller;
import com.epmet.common.token.dto.form.LoginByPassWordFormDTO;
import com.epmet.common.token.dto.form.LoginByWxCodeFormDTO;
import com.epmet.common.token.dto.result.UserTokenResultDTO;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.exception.ErrorCode;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
@ -81,4 +83,18 @@ public class LoginController {
Result<UserTokenResultDTO> result = loginService.loginByPassword(formDTO);
return result;
}
/**
* @param request
* @return com.epmet.commons.tools.utils.Result
* @Author yinzuomei
* @Description 退出登录
* @Date 2020/3/18 22:43
**/
@PostMapping(value = "logout")
public Result logout(HttpServletRequest request) {
String token = request.getParameter(Constant.TOKEN_HEADER);
return loginService.logoutByToken(token);
}
}

27
epmet-auth/src/main/java/com/epmet/jwt/JwtTokenUtils.java

@ -61,6 +61,33 @@ public class JwtTokenUtils {
return null;
}
}
/**
* @return java.util.Date
* @param token
* @Author yinzuomei
* @Description 获取token的有效期截止时间
* @Date 2020/3/18 22:17
**/
public Date getExpiration(String token){
try {
return Jwts.parser()
.setSigningKey(jwtProperties.getSecret())
.parseClaimsJws(token)
.getBody().getExpiration();
} catch (Exception e) {
logger.debug("validate is token error, token = " + token, e);
return null;
}
}
/**
* @param map
* @return java.lang.String
* @Author yinzuomei
* @Description 根据app+client+userId生成token
* @Date 2020/3/18 22:29
**/
public String createToken(Map<String, Object> map) {
return Jwts.builder()
.setHeaderParam("typ", "JWT")

2
epmet-auth/src/main/java/com/epmet/redis/CaptchaRedis.java

@ -40,7 +40,7 @@ public class CaptchaRedis {
public String get(String uuid){
String key = RedisKeys.getLoginCaptchaKey(uuid);
String captcha = (String)redisUtils.get(key);
logger.info("获取验证码key=["+key+"]captcha=["+captcha+"]");
//logger.info("获取验证码key=["+key+"]captcha=["+captcha+"]");
//删除验证码
if(captcha != null){
redisUtils.delete(key);

9
epmet-auth/src/main/java/com/epmet/service/LoginService.java

@ -28,4 +28,13 @@ public interface LoginService {
* @Date 2020/3/14 19:54
**/
Result<UserTokenResultDTO> loginByPassword(LoginByPassWordFormDTO formDTO);
/**
* @param token
* @return com.epmet.commons.tools.utils.Result
* @Author yinzuomei
* @Description 退出登录
* @Date 2020/3/18 22:44
**/
Result logoutByToken(String token);
}

2
epmet-auth/src/main/java/com/epmet/service/impl/CaptchaServiceImpl.java

@ -36,7 +36,7 @@ public class CaptchaServiceImpl implements CaptchaService {
public BufferedImage create(String uuid) {
//生成验证码
String captcha = producer.createText();
logger.info("uuid:"+uuid+",生成的验证码:"+captcha);
//logger.info("uuid:"+uuid+",生成的验证码:"+captcha);
//保存验证码
captchaRedis.set(uuid, captcha);

27
epmet-auth/src/main/java/com/epmet/service/impl/LoginServiceImpl.java

@ -192,7 +192,7 @@ public class LoginServiceImpl implements LoginService {
map.put("client", formDTO.getClient());
map.put("userId", userId);
String token = jwtTokenUtils.createToken(map);
logger.info("app:"+formDTO.getApp()+"client:"+formDTO.getClient()+"userId:"+userId+"生成token["+token+"]");
// logger.info("app:"+formDTO.getApp()+";client:"+formDTO.getClient()+";userId:"+userId+";生成token["+token+"]");
int expire = jwtTokenProperties.getExpire();
TokenDto tokenDto = new TokenDto();
tokenDto.setApp(formDTO.getApp());
@ -201,7 +201,12 @@ public class LoginServiceImpl implements LoginService {
tokenDto.setOpenId(wxMaJscode2SessionResult.getOpenid());
tokenDto.setSessionKey(wxMaJscode2SessionResult.getSessionKey());
tokenDto.setUnionId(wxMaJscode2SessionResult.getUnionid());
cpUserDetailRedis.set(token,tokenDto, expire);
tokenDto.setToken(token);
tokenDto.setUpdateTime(System.currentTimeMillis());
tokenDto.setExpireTime(jwtTokenUtils.getExpiration(token).getTime());
cpUserDetailRedis.set(tokenDto, expire);
// logger.info("token过期时间:"+tokenUtil.getExpire(tokenDto.getApp(),tokenDto.getClient(),tokenDto.getUserId()));
// logger.info("截止时间:"+ DateUtils.format(jwtTokenUtils.getExpiration(token),"yyyy-MM-dd HH:mm:ss"));
return token;
}
@ -258,13 +263,27 @@ public class LoginServiceImpl implements LoginService {
map.put("client", formDTO.getClient());
map.put("userId", userId);
String token = jwtTokenUtils.createToken(map);
logger.info("app:"+formDTO.getApp()+"client:"+formDTO.getClient()+"userId:"+userId+"生成token["+token+"]");
// logger.info("app:"+formDTO.getApp()+";client:"+formDTO.getClient()+";userId:"+userId+";生成token["+token+"]");
int expire = jwtTokenProperties.getExpire();
TokenDto tokenDto = new TokenDto();
tokenDto.setApp(formDTO.getApp());
tokenDto.setClient(formDTO.getClient());
tokenDto.setUserId(userId);
cpUserDetailRedis.set(token,tokenDto, expire);
tokenDto.setToken(token);
tokenDto.setUpdateTime(System.currentTimeMillis());
tokenDto.setExpireTime(jwtTokenUtils.getExpiration(token).getTime());
cpUserDetailRedis.set(tokenDto, expire);
// logger.info("token过期时间:"+tokenUtil.getExpire(tokenDto.getApp(),tokenDto.getClient(),tokenDto.getUserId()));
// logger.info("截止时间:"+ DateUtils.format(jwtTokenUtils.getExpiration(token),"yyyy-MM-dd HH:mm:ss"));
return token;
}
@Override
public Result logoutByToken(String token) {
//记录登出日志
//删除redis
//web端清空菜单栏和权限,小程序目前又
return null;
}
}

21
epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/dto/TokenDto.java

@ -1,9 +1,7 @@
package com.epmet.common.token.dto;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
@ -14,9 +12,7 @@ import java.io.Serializable;
*/
@Data
public class TokenDto implements Serializable {
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 8883581762088390769L;
/**
* 政府端:gov居民端:resi运营端:oper
*/
@ -46,4 +42,19 @@ public class TokenDto implements Serializable {
* unionId
*/
private String unionId;
/**
* token字符串
*/
private String token;
/**
* 过期时间戳
*/
private Long expireTime;
/**
* 最后一次更新时间
*/
private long updateTime;
}

40
epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/util/CpUserDetailRedis.java

@ -30,11 +30,11 @@ public class CpUserDetailRedis {
@Autowired
private RedisUtils redisUtils;
public void set(String tokenStr,TokenDto user, long expire) {
public void set(TokenDto user, long expire) {
if (user == null) {
return;
}
String key = RedisKeys.getCpUserKey(tokenStr);
String key = RedisKeys.getCpUserKey(user.getApp(), user.getClient(), user.getUserId());
//bean to map
Map<String, Object> map = BeanUtil.beanToMap(user, false, true);
redisUtils.hMSet(key, map, expire);
@ -43,11 +43,13 @@ public class CpUserDetailRedis {
/**
* 获取token信息
*
* @param tokenStr token字符串
* @param app 居民端resi;政府端gov;运营端oper
* @param client PC端web;微信小程序端wxmp
* @param userId oper_usercustomer_usercustomer_staff表主键
* @return
*/
public TokenDto get(String tokenStr) {
String key = RedisKeys.getCpUserKey(tokenStr);
public TokenDto get(String app, String client, String userId) {
String key = RedisKeys.getCpUserKey(app,client,userId);
Map<String, Object> map = redisUtils.hGetAll(key);
if (MapUtil.isEmpty(map)) {
@ -63,32 +65,38 @@ public class CpUserDetailRedis {
/**
* 删除用户信息
*
* @param tokenStr token字符串
* @param app 居民端resi;政府端gov;运营端oper
* @param client PC端web;微信小程序端wxmp
* @param userId oper_usercustomer_usercustomer_staff表主键
*/
public void logout(String tokenStr) {
redisUtils.delete(RedisKeys.getCpUserKey(tokenStr));
public void logout(String app, String client, String userId) {
redisUtils.delete(RedisKeys.getCpUserKey(app,client,userId));
}
/**
* 设置redis时间
*
* @param tokenStr
* @param expire
* @param app 居民端resi;政府端gov;运营端oper
* @param client PC端web;微信小程序端wxmp
* @param userId oper_usercustomer_usercustomer_staff表主键
* @param expire 有效时间
* @author rongchao
*/
public boolean expire(String tokenStr, long expire) {
return redisUtils.expire(RedisKeys.getCpUserKey(tokenStr), expire);
public boolean expire(String app, String client, String userId, long expire) {
return redisUtils.expire(RedisKeys.getCpUserKey(app,client,userId), expire);
}
/**
* 查询token剩余时间
*
* @param tokenStr
* @return long
* @param app 居民端resi;政府端gov;运营端oper
* @param client PC端web;微信小程序端wxmp
* @param userId oper_usercustomer_usercustomer_staff表主键
* @return 获取有效期
* @author yujintao
* @date 2019/9/9 14:18
*/
public long getExpire(String tokenStr) {
return redisUtils.getExpire(RedisKeys.getCpUserKey(tokenStr));
public long getExpire(String app, String client, String userId) {
return redisUtils.getExpire(RedisKeys.getCpUserKey(app, client, userId));
}
}

20
epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/util/TokenUtil.java

@ -24,28 +24,30 @@ public class TokenUtil {
@Autowired
private CpUserDetailRedis redisUtils;
public TokenDto getTokenInfo(String tokenStr) {
TokenDto tokenDto = redisUtils.get(tokenStr);
public TokenDto getTokenInfo(String app,String client,String userId) {
TokenDto tokenDto = redisUtils.get(app,client,userId);
return tokenDto;
}
public void expireToken(String tokenStr) {
redisUtils.logout(tokenStr);
public void expireToken(String app,String client,String userId) {
redisUtils.logout(app,client,userId);
}
public boolean delayToken(String tokenStr) {
return redisUtils.expire(tokenStr, tokenPropertise.getExpire());
public boolean delayToken(String app,String client,String userId) {
return redisUtils.expire(app, client,userId,tokenPropertise.getExpire());
}
/**
* 获取token过期时间
*
* @param tokenStr
* @param app
* @param client
* @param userId
* @return long
* @author yujintao
* @date 2019/9/9 14:19
*/
public long getExpire(String tokenStr) {
return redisUtils.getExpire(tokenStr);
public long getExpire(String app,String client,String userId) {
return redisUtils.getExpire(app,client,userId);
}
}

6
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java

@ -76,11 +76,11 @@ public class RedisKeys {
}
/**
* 用户token Key
* epmet用户token对应redis中的Key
* epmet:sys:security:user:token字符串
*/
public static String getCpUserKey(String tokenStr) {
return rootPrefix.concat("sys:security:user:").concat(tokenStr);
public static String getCpUserKey(String app, String client, String userId) {
return rootPrefix.concat("sys:security:user:").concat(app).concat(":").concat(client).concat(":").concat(userId);
}
/**

Loading…
Cancel
Save