895206d2829cd997b853f151a2d7cc67bfb037db.svn-base 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package cn.com.goldenwater.dcproj.controller.system;
  2. import cn.com.goldenwater.core.web.BaseController;
  3. import cn.com.goldenwater.core.web.BaseResponse;
  4. import cn.com.goldenwater.dcproj.constValue.CommonLabel;
  5. import cn.com.goldenwater.dcproj.dto.LoginUser;
  6. import cn.com.goldenwater.dcproj.utils.JWTTokenUtil;
  7. import cn.com.goldenwater.id.util.UuidUtil;
  8. import io.swagger.annotations.Api;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.data.redis.core.RedisTemplate;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RequestMethod;
  14. import org.springframework.web.bind.annotation.RestController;
  15. import javax.servlet.http.HttpServletRequest;
  16. import java.util.concurrent.TimeUnit;
  17. @Api(value = "auth token", tags = "011 accessToken校验接口")
  18. @RestController
  19. @RequestMapping("/auth")
  20. public class AuthController extends BaseController {
  21. @Autowired
  22. private RedisTemplate redisTemplate;
  23. @RequestMapping(value = "/refresh", method = RequestMethod.POST)
  24. public BaseResponse refresh(HttpServletRequest request) {
  25. String uuid = request.getHeader(CommonLabel.ACCESS_TOKEN);
  26. String persId = request.getHeader(CommonLabel.PERSID);
  27. String accessToken = (String) redisTemplate.opsForValue().get(uuid);
  28. if (StringUtils.isBlank(accessToken) || "null".equals(accessToken)) {
  29. String key = uuid + persId;
  30. // 获取refreshtoken,解析
  31. String refreshtoken = (String) redisTemplate.opsForValue().get(key);
  32. if (StringUtils.isBlank(refreshtoken) || "null".equals(refreshtoken)) {
  33. return buildFailResponse(9992, "太长时间未登录,请退出后重新登录!!");
  34. }
  35. LoginUser user = JWTTokenUtil.getObject(refreshtoken, persId);
  36. if (user != null && user.getPersId().equals(persId)) {
  37. String newToken = UuidUtil.uuid();
  38. //BisInspAllRlationPers bisInspAllRlationPers=bisInspAllRlationPersService.get(persId);
  39. accessToken = JWTTokenUtil.sign(user, user.getPersId());
  40. redisTemplate.opsForValue().set(newToken, accessToken, JWTTokenUtil.maxAge, TimeUnit.MILLISECONDS);
  41. redisTemplate.opsForValue().set(newToken + persId, accessToken, JWTTokenUtil.refreshmaxAge, TimeUnit.MILLISECONDS);
  42. redisTemplate.delete(key);
  43. //bisInspAllRlationPersService.sendChannel(newToken,bisInspAllRlationPers,request, PlusEnum.ADD.getNumber());
  44. BaseResponse baseResponse = buildSuccessResponse(12345, "token刷新成功!", newToken);
  45. baseResponse.setAccessToken(newToken);
  46. return baseResponse;
  47. }
  48. return buildFailResponse(9992, "请退出后重新登录!!");
  49. } else {
  50. LoginUser user = JWTTokenUtil.unsign(accessToken, persId);
  51. if (user != null) {
  52. BaseResponse baseResponse = buildSuccessResponse(12345, "token有效,可继续使用", uuid);
  53. baseResponse.setAccessToken(uuid);
  54. accessToken = JWTTokenUtil.sign(user, persId);
  55. redisTemplate.opsForValue().set(uuid, accessToken, JWTTokenUtil.maxAge, TimeUnit.MILLISECONDS);
  56. redisTemplate.opsForValue().set(uuid + persId, accessToken, JWTTokenUtil.refreshmaxAge, TimeUnit.MILLISECONDS);
  57. return baseResponse;
  58. }
  59. }
  60. return buildFailResponse("刷新token失败");
  61. }
  62. }