df47168d4ad30315dc75bfba3f0edd0736e78667.svn-base 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package cn.com.goldenwater.dcproj.intercepter;
  2. import cn.com.goldenwater.dcproj.constValue.CommonLabel;
  3. import cn.com.goldenwater.dcproj.dto.LoginUser;
  4. import cn.com.goldenwater.dcproj.utils.JWTTokenUtil;
  5. import cn.com.goldenwater.dcproj.utils.ReturnUtils;
  6. import org.apache.commons.lang3.StringUtils;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.beans.factory.annotation.Value;
  11. import org.springframework.data.redis.core.RedisTemplate;
  12. import org.springframework.stereotype.Component;
  13. import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
  14. import javax.servlet.http.HttpServletRequest;
  15. import javax.servlet.http.HttpServletResponse;
  16. import java.util.concurrent.TimeUnit;
  17. @Component
  18. public class LogInterceptor extends HandlerInterceptorAdapter {
  19. @Value("${intercept.enable}")
  20. public Boolean enterceptEnable;
  21. private Logger logger = LoggerFactory.getLogger(getClass());
  22. @Autowired
  23. private RedisTemplate redisTemplate;
  24. @Override
  25. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
  26. throws Exception {
  27. if (enterceptEnable) {
  28. String persId = request.getHeader(CommonLabel.PERSID);
  29. String uuid=request.getHeader(CommonLabel.ACCESS_TOKEN);
  30. if(StringUtils.isBlank(uuid)){
  31. ReturnUtils.responseFail(response,"accessToken error!!",9995);
  32. return false;
  33. }
  34. if (StringUtils.isNotBlank(persId)) {
  35. //有效期内
  36. String accessToken= (String) redisTemplate.opsForValue().get(uuid);
  37. logger.info("source-->" + uuid + ":accessToken---->" + accessToken);
  38. if(accessToken==null||StringUtils.isBlank(accessToken)||"null".equals(accessToken)){
  39. ReturnUtils.responseFail(response,"token认证失效,请退出重新登录",9999);
  40. logger.info(request.getRequestURI()+"--->9999");
  41. return false;
  42. }
  43. LoginUser inspAllRlationPers = JWTTokenUtil.unsign(accessToken,persId);
  44. if(inspAllRlationPers!=null ){
  45. if(!inspAllRlationPers.getPersId().equals(persId)){
  46. ReturnUtils.responseFail(response,"信息存在被篡改嫌疑",9991);
  47. return false;
  48. }
  49. synchronized (this) {
  50. accessToken = JWTTokenUtil.sign(inspAllRlationPers, inspAllRlationPers.getPersId());
  51. redisTemplate.opsForValue().set(uuid, accessToken, JWTTokenUtil.maxAge, TimeUnit.MILLISECONDS);
  52. redisTemplate.opsForValue().set(uuid+persId,accessToken,JWTTokenUtil.refreshmaxAge,TimeUnit.MILLISECONDS);
  53. }
  54. return true;
  55. }
  56. //过了有效期,刷新token
  57. inspAllRlationPers=JWTTokenUtil.getObject(accessToken,persId);
  58. if(inspAllRlationPers !=null){
  59. ReturnUtils.responseFail(response,"accessToken过期,请重新刷新",9998);
  60. logger.info("token 已经过期,请重新刷新!!");
  61. }else{
  62. ReturnUtils.responseFail(response,"accessToken过期,请重新刷新",9996);
  63. logger.info("请退出重新登陆!!");
  64. }
  65. }
  66. return false;
  67. } else {
  68. return true;
  69. }
  70. }
  71. }