From d1785b5dbb6c3d0b51e8c6548db2c9ede6a26bea Mon Sep 17 00:00:00 2001 From: topsun Date: Fri, 5 May 2023 00:03:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=B8=E6=9C=BA=E7=AB=AF=E6=A0=A1=E9=AA=8Cac?= =?UTF-8?q?cessToken=E4=BB=A3=E7=A0=81=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interceptor/InterceptorConfig.java | 32 +++++++++++ .../apidriver/interceptor/JwtInterceptor.java | 53 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 online-taxi-public/api-driver/src/main/java/com/taxi/apidriver/interceptor/InterceptorConfig.java create mode 100644 online-taxi-public/api-driver/src/main/java/com/taxi/apidriver/interceptor/JwtInterceptor.java diff --git a/online-taxi-public/api-driver/src/main/java/com/taxi/apidriver/interceptor/InterceptorConfig.java b/online-taxi-public/api-driver/src/main/java/com/taxi/apidriver/interceptor/InterceptorConfig.java new file mode 100644 index 0000000..f336192 --- /dev/null +++ b/online-taxi-public/api-driver/src/main/java/com/taxi/apidriver/interceptor/InterceptorConfig.java @@ -0,0 +1,32 @@ +package com.taxi.apidriver.interceptor; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class InterceptorConfig implements WebMvcConfigurer { + + /** + * 在拦截器初始化时,JwtInterceptor的bean已经生成 + * @return + */ + @Bean + public JwtInterceptor jwtInterceptor(){ + return new JwtInterceptor(); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { +// WebMvcConfigurer.super.addInterceptors(registry); + registry.addInterceptor(jwtInterceptor()) + .addPathPatterns("/**")//拦截的路径 + .excludePathPatterns("/noauthTest") + .excludePathPatterns("/user") + .excludePathPatterns("/token-refresh") + .excludePathPatterns("/verification-code-check") + .excludePathPatterns("/verification-code");//不拦截的路径 + + } +} diff --git a/online-taxi-public/api-driver/src/main/java/com/taxi/apidriver/interceptor/JwtInterceptor.java b/online-taxi-public/api-driver/src/main/java/com/taxi/apidriver/interceptor/JwtInterceptor.java new file mode 100644 index 0000000..8511f0c --- /dev/null +++ b/online-taxi-public/api-driver/src/main/java/com/taxi/apidriver/interceptor/JwtInterceptor.java @@ -0,0 +1,53 @@ +package com.taxi.apidriver.interceptor; + +import com.internal.contant.TokenConstant; +import com.internal.dto.ResponseResult; +import com.internal.dto.TokenResult; +import com.internal.util.JwtUtils; +import com.internal.util.RedisPrefixUtils; +import net.sf.json.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +public class JwtInterceptor implements HandlerInterceptor { + + @Autowired + private StringRedisTemplate stringRedisTemplate; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + boolean resultBoolean = true; + String resultStr = ""; + String token = request.getHeader("Authorization"); + //解析token + TokenResult tokenResult = JwtUtils.checkToken(token); + if(tokenResult == null){ + resultStr = "token invalid "; + resultBoolean = false; + }else{ + //拼接tokenKey + String phone = tokenResult.getPassengerPhone(); + String identity = tokenResult.getIdentity(); + String tokenKey = RedisPrefixUtils.getTokenPrefixKey(phone,identity, TokenConstant.ACCESS_TOKEN_TYPE); + //从redis中取出token + String redisToke = stringRedisTemplate.opsForValue().get(tokenKey); + if(StringUtils.isBlank(redisToke) || (!token.trim().equals(redisToke.trim()))){ + resultStr = "token invalid "; + resultBoolean = false; + } + } + // + if(!resultBoolean){ + PrintWriter outPrintWriter = response.getWriter(); + JSONObject jsonObject = JSONObject.fromObject(ResponseResult.fail(resultStr)); + outPrintWriter.print(jsonObject.toString()); + } + return resultBoolean; + } +}