package cn.com.goldenwater.dcproj.controller.system; import cn.com.goldenwater.core.web.BaseController; import cn.com.goldenwater.core.web.BaseResponse; import cn.com.goldenwater.dcproj.constValue.CommonLabel; import cn.com.goldenwater.dcproj.dto.LoginUser; import cn.com.goldenwater.dcproj.utils.JWTTokenUtil; import cn.com.goldenwater.id.util.UuidUtil; import io.swagger.annotations.Api; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.concurrent.TimeUnit; @Api(value = "auth token", tags = "011 accessToken校验接口") @RestController @RequestMapping("/auth") public class AuthController extends BaseController { @Autowired private RedisTemplate redisTemplate; @RequestMapping(value = "/refresh", method = RequestMethod.POST) public BaseResponse refresh(HttpServletRequest request) { String uuid = request.getHeader(CommonLabel.ACCESS_TOKEN); String persId = request.getHeader(CommonLabel.PERSID); String accessToken = (String) redisTemplate.opsForValue().get(uuid); if (StringUtils.isBlank(accessToken) || "null".equals(accessToken)) { String key = uuid + persId; // 获取refreshtoken,解析 String refreshtoken = (String) redisTemplate.opsForValue().get(key); if (StringUtils.isBlank(refreshtoken) || "null".equals(refreshtoken)) { return buildFailResponse(9992, "太长时间未登录,请退出后重新登录!!"); } LoginUser user = JWTTokenUtil.getObject(refreshtoken, persId); if (user != null && user.getPersId().equals(persId)) { String newToken = UuidUtil.uuid(); //BisInspAllRlationPers bisInspAllRlationPers=bisInspAllRlationPersService.get(persId); accessToken = JWTTokenUtil.sign(user, user.getPersId()); redisTemplate.opsForValue().set(newToken, accessToken, JWTTokenUtil.maxAge, TimeUnit.MILLISECONDS); redisTemplate.opsForValue().set(newToken + persId, accessToken, JWTTokenUtil.refreshmaxAge, TimeUnit.MILLISECONDS); redisTemplate.delete(key); //bisInspAllRlationPersService.sendChannel(newToken,bisInspAllRlationPers,request, PlusEnum.ADD.getNumber()); BaseResponse baseResponse = buildSuccessResponse(12345, "token刷新成功!", newToken); baseResponse.setAccessToken(newToken); return baseResponse; } return buildFailResponse(9992, "请退出后重新登录!!"); } else { LoginUser user = JWTTokenUtil.unsign(accessToken, persId); if (user != null) { BaseResponse baseResponse = buildSuccessResponse(12345, "token有效,可继续使用", uuid); baseResponse.setAccessToken(uuid); accessToken = JWTTokenUtil.sign(user, persId); redisTemplate.opsForValue().set(uuid, accessToken, JWTTokenUtil.maxAge, TimeUnit.MILLISECONDS); redisTemplate.opsForValue().set(uuid + persId, accessToken, JWTTokenUtil.refreshmaxAge, TimeUnit.MILLISECONDS); return baseResponse; } } return buildFailResponse("刷新token失败"); } }