Browse Source

登录接口修改

dev
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.LoginByPassWordFormDTO;
import com.epmet.common.token.dto.form.LoginByWxCodeFormDTO; import com.epmet.common.token.dto.form.LoginByWxCodeFormDTO;
import com.epmet.common.token.dto.result.UserTokenResultDTO; 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.exception.ErrorCode;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils; import com.epmet.commons.tools.validator.AssertUtils;
@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.IOException; import java.io.IOException;
@ -81,4 +83,18 @@ public class LoginController {
Result<UserTokenResultDTO> result = loginService.loginByPassword(formDTO); Result<UserTokenResultDTO> result = loginService.loginByPassword(formDTO);
return result; 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 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) { public String createToken(Map<String, Object> map) {
return Jwts.builder() return Jwts.builder()
.setHeaderParam("typ", "JWT") .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){ public String get(String uuid){
String key = RedisKeys.getLoginCaptchaKey(uuid); String key = RedisKeys.getLoginCaptchaKey(uuid);
String captcha = (String)redisUtils.get(key); String captcha = (String)redisUtils.get(key);
logger.info("获取验证码key=["+key+"]captcha=["+captcha+"]"); //logger.info("获取验证码key=["+key+"]captcha=["+captcha+"]");
//删除验证码 //删除验证码
if(captcha != null){ if(captcha != null){
redisUtils.delete(key); 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 * @Date 2020/3/14 19:54
**/ **/
Result<UserTokenResultDTO> loginByPassword(LoginByPassWordFormDTO formDTO); 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) { public BufferedImage create(String uuid) {
//生成验证码 //生成验证码
String captcha = producer.createText(); String captcha = producer.createText();
logger.info("uuid:"+uuid+",生成的验证码:"+captcha); //logger.info("uuid:"+uuid+",生成的验证码:"+captcha);
//保存验证码 //保存验证码
captchaRedis.set(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("client", formDTO.getClient());
map.put("userId", userId); map.put("userId", userId);
String token = jwtTokenUtils.createToken(map); 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(); int expire = jwtTokenProperties.getExpire();
TokenDto tokenDto = new TokenDto(); TokenDto tokenDto = new TokenDto();
tokenDto.setApp(formDTO.getApp()); tokenDto.setApp(formDTO.getApp());
@ -201,7 +201,12 @@ public class LoginServiceImpl implements LoginService {
tokenDto.setOpenId(wxMaJscode2SessionResult.getOpenid()); tokenDto.setOpenId(wxMaJscode2SessionResult.getOpenid());
tokenDto.setSessionKey(wxMaJscode2SessionResult.getSessionKey()); tokenDto.setSessionKey(wxMaJscode2SessionResult.getSessionKey());
tokenDto.setUnionId(wxMaJscode2SessionResult.getUnionid()); 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; return token;
} }
@ -258,13 +263,27 @@ public class LoginServiceImpl implements LoginService {
map.put("client", formDTO.getClient()); map.put("client", formDTO.getClient());
map.put("userId", userId); map.put("userId", userId);
String token = jwtTokenUtils.createToken(map); 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(); int expire = jwtTokenProperties.getExpire();
TokenDto tokenDto = new TokenDto(); TokenDto tokenDto = new TokenDto();
tokenDto.setApp(formDTO.getApp()); tokenDto.setApp(formDTO.getApp());
tokenDto.setClient(formDTO.getClient()); tokenDto.setClient(formDTO.getClient());
tokenDto.setUserId(userId); 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; 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; package com.epmet.common.token.dto;
import com.google.gson.annotations.SerializedName;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable; import java.io.Serializable;
/** /**
@ -14,9 +12,7 @@ import java.io.Serializable;
*/ */
@Data @Data
public class TokenDto implements Serializable { public class TokenDto implements Serializable {
private static final long serialVersionUID = 8883581762088390769L;
private static final long serialVersionUID = 1L;
/** /**
* 政府端:gov居民端:resi运营端:oper * 政府端:gov居民端:resi运营端:oper
*/ */
@ -46,4 +42,19 @@ public class TokenDto implements Serializable {
* unionId * unionId
*/ */
private String 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 @Autowired
private RedisUtils redisUtils; private RedisUtils redisUtils;
public void set(String tokenStr,TokenDto user, long expire) { public void set(TokenDto user, long expire) {
if (user == null) { if (user == null) {
return; return;
} }
String key = RedisKeys.getCpUserKey(tokenStr); String key = RedisKeys.getCpUserKey(user.getApp(), user.getClient(), user.getUserId());
//bean to map //bean to map
Map<String, Object> map = BeanUtil.beanToMap(user, false, true); Map<String, Object> map = BeanUtil.beanToMap(user, false, true);
redisUtils.hMSet(key, map, expire); redisUtils.hMSet(key, map, expire);
@ -43,11 +43,13 @@ public class CpUserDetailRedis {
/** /**
* 获取token信息 * 获取token信息
* *
* @param tokenStr token字符串 * @param app 居民端resi;政府端gov;运营端oper
* @param client PC端web;微信小程序端wxmp
* @param userId oper_usercustomer_usercustomer_staff表主键
* @return * @return
*/ */
public TokenDto get(String tokenStr) { public TokenDto get(String app, String client, String userId) {
String key = RedisKeys.getCpUserKey(tokenStr); String key = RedisKeys.getCpUserKey(app,client,userId);
Map<String, Object> map = redisUtils.hGetAll(key); Map<String, Object> map = redisUtils.hGetAll(key);
if (MapUtil.isEmpty(map)) { 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) { public void logout(String app, String client, String userId) {
redisUtils.delete(RedisKeys.getCpUserKey(tokenStr)); redisUtils.delete(RedisKeys.getCpUserKey(app,client,userId));
} }
/** /**
* 设置redis时间 * 设置redis时间
* *
* @param tokenStr * @param app 居民端resi;政府端gov;运营端oper
* @param expire * @param client PC端web;微信小程序端wxmp
* @param userId oper_usercustomer_usercustomer_staff表主键
* @param expire 有效时间
* @author rongchao * @author rongchao
*/ */
public boolean expire(String tokenStr, long expire) { public boolean expire(String app, String client, String userId, long expire) {
return redisUtils.expire(RedisKeys.getCpUserKey(tokenStr), expire); return redisUtils.expire(RedisKeys.getCpUserKey(app,client,userId), expire);
} }
/** /**
* 查询token剩余时间 * 查询token剩余时间
* *
* @param tokenStr * @param app 居民端resi;政府端gov;运营端oper
* @return long * @param client PC端web;微信小程序端wxmp
* @param userId oper_usercustomer_usercustomer_staff表主键
* @return 获取有效期
* @author yujintao * @author yujintao
* @date 2019/9/9 14:18 * @date 2019/9/9 14:18
*/ */
public long getExpire(String tokenStr) { public long getExpire(String app, String client, String userId) {
return redisUtils.getExpire(RedisKeys.getCpUserKey(tokenStr)); 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 @Autowired
private CpUserDetailRedis redisUtils; private CpUserDetailRedis redisUtils;
public TokenDto getTokenInfo(String tokenStr) { public TokenDto getTokenInfo(String app,String client,String userId) {
TokenDto tokenDto = redisUtils.get(tokenStr); TokenDto tokenDto = redisUtils.get(app,client,userId);
return tokenDto; return tokenDto;
} }
public void expireToken(String tokenStr) { public void expireToken(String app,String client,String userId) {
redisUtils.logout(tokenStr); redisUtils.logout(app,client,userId);
} }
public boolean delayToken(String tokenStr) { public boolean delayToken(String app,String client,String userId) {
return redisUtils.expire(tokenStr, tokenPropertise.getExpire()); return redisUtils.expire(app, client,userId,tokenPropertise.getExpire());
} }
/** /**
* 获取token过期时间 * 获取token过期时间
* *
* @param tokenStr * @param app
* @param client
* @param userId
* @return long * @return long
* @author yujintao * @author yujintao
* @date 2019/9/9 14:19 * @date 2019/9/9 14:19
*/ */
public long getExpire(String tokenStr) { public long getExpire(String app,String client,String userId) {
return redisUtils.getExpire(tokenStr); 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字符串 * epmet:sys:security:user:token字符串
*/ */
public static String getCpUserKey(String tokenStr) { public static String getCpUserKey(String app, String client, String userId) {
return rootPrefix.concat("sys:security:user:").concat(tokenStr); return rootPrefix.concat("sys:security:user:").concat(app).concat(":").concat(client).concat(":").concat(userId);
} }
/** /**

Loading…
Cancel
Save