From 9527c1064f4a9731356b22b0988b002997cc99ed Mon Sep 17 00:00:00 2001 From: xiongfeng Date: Fri, 17 Jun 2022 17:58:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=8B=A6=E6=88=AA=E5=99=A8?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 8 ++ .../basedemo/common/model/LoginUserInfo.java | 20 +++++ .../xf/basedemo/config/TokenInterceptor.java | 34 ------- .../InterceptorConfig.java | 3 +- .../basedemo/interceptor/SessionContext.java | 43 +++++++++ .../interceptor/TokenInterceptor.java | 68 ++++++++++++++ src/main/resources/application-dev.yml | 88 +++++-------------- 7 files changed, 162 insertions(+), 102 deletions(-) create mode 100644 src/main/java/cn/xf/basedemo/common/model/LoginUserInfo.java delete mode 100644 src/main/java/cn/xf/basedemo/config/TokenInterceptor.java rename src/main/java/cn/xf/basedemo/{config => interceptor}/InterceptorConfig.java (89%) create mode 100644 src/main/java/cn/xf/basedemo/interceptor/SessionContext.java create mode 100644 src/main/java/cn/xf/basedemo/interceptor/TokenInterceptor.java diff --git a/pom.xml b/pom.xml index 4e88c66..fd0c522 100644 --- a/pom.xml +++ b/pom.xml @@ -76,6 +76,14 @@ 3.19.2 + + + org.springframework.boot + spring-boot-starter-data-redis + 2.7.0 + + + diff --git a/src/main/java/cn/xf/basedemo/common/model/LoginUserInfo.java b/src/main/java/cn/xf/basedemo/common/model/LoginUserInfo.java new file mode 100644 index 0000000..87189a1 --- /dev/null +++ b/src/main/java/cn/xf/basedemo/common/model/LoginUserInfo.java @@ -0,0 +1,20 @@ +package cn.xf.basedemo.common.model; + +import lombok.Data; + +/** + * @program: xf-boot-base + * @ClassName LoginUserInfo + * @description: + * @author: xiongfeng + * @create: 2022-06-17 14:54 + **/ +@Data +public class LoginUserInfo { + + private Integer id; + + private String name; + + private String phone; +} diff --git a/src/main/java/cn/xf/basedemo/config/TokenInterceptor.java b/src/main/java/cn/xf/basedemo/config/TokenInterceptor.java deleted file mode 100644 index f20e562..0000000 --- a/src/main/java/cn/xf/basedemo/config/TokenInterceptor.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.xf.basedemo.config; - -import org.springframework.web.servlet.HandlerInterceptor; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * @program: spring-boot-base-demo - * @ClassName TokenInterceptor - * @description: - * @author: xiongfeng - * @create: 2022-06-16 14:17 - **/ -public class TokenInterceptor implements HandlerInterceptor { - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - - String requestURI = request.getRequestURI(); - - //登录处理 - String authorization = request.getHeader("Authorization"); - - - return HandlerInterceptor.super.preHandle(request, response, handler); - } - - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - HandlerInterceptor.super.afterCompletion(request, response, handler, ex); - } -} diff --git a/src/main/java/cn/xf/basedemo/config/InterceptorConfig.java b/src/main/java/cn/xf/basedemo/interceptor/InterceptorConfig.java similarity index 89% rename from src/main/java/cn/xf/basedemo/config/InterceptorConfig.java rename to src/main/java/cn/xf/basedemo/interceptor/InterceptorConfig.java index e4e3b24..99c1c9c 100644 --- a/src/main/java/cn/xf/basedemo/config/InterceptorConfig.java +++ b/src/main/java/cn/xf/basedemo/interceptor/InterceptorConfig.java @@ -1,5 +1,6 @@ -package cn.xf.basedemo.config; +package cn.xf.basedemo.interceptor; +import cn.xf.basedemo.interceptor.TokenInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; diff --git a/src/main/java/cn/xf/basedemo/interceptor/SessionContext.java b/src/main/java/cn/xf/basedemo/interceptor/SessionContext.java new file mode 100644 index 0000000..2020a30 --- /dev/null +++ b/src/main/java/cn/xf/basedemo/interceptor/SessionContext.java @@ -0,0 +1,43 @@ +package cn.xf.basedemo.interceptor; + +import cn.xf.basedemo.common.model.LoginUserInfo; + +/** + * @program: xf-boot-base + * @ClassName SessionContext + * @description: + * @author: xiongfeng + * @create: 2022-06-17 15:03 + **/ +public class SessionContext { + + private ThreadLocal threadLocal; + + private SessionContext() { + this.threadLocal = new ThreadLocal<>(); + } + + /** + * 使用静态内部类创建单例 + */ + private static class Context { + private static final SessionContext INSTANCE = new SessionContext(); + } + + public static SessionContext getInstance() { + return Context.INSTANCE; + } + + public void set(LoginUserInfo user) { + this.threadLocal.set(user); + } + + public LoginUserInfo get() { + return this.threadLocal.get(); + } + + public void clear() { + this.threadLocal.remove(); + } + +} diff --git a/src/main/java/cn/xf/basedemo/interceptor/TokenInterceptor.java b/src/main/java/cn/xf/basedemo/interceptor/TokenInterceptor.java new file mode 100644 index 0000000..0d13a6d --- /dev/null +++ b/src/main/java/cn/xf/basedemo/interceptor/TokenInterceptor.java @@ -0,0 +1,68 @@ +package cn.xf.basedemo.interceptor; + +import cn.xf.basedemo.common.model.LoginUserInfo; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +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.util.Arrays; +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * @program: spring-boot-base-demo + * @ClassName TokenInterceptor + * @description: + * @author: xiongfeng + * @create: 2022-06-16 14:17 + **/ +public class TokenInterceptor implements HandlerInterceptor { + + + @Autowired + private StringRedisTemplate redisTemplate; + + @Autowired + private ObjectMapper objectMapper; + + //不拦截的请求列表 + private static final List EXCLUDE_PATH_LIST = Arrays.asList(""); + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + + String requestURI = request.getRequestURI(); + if(EXCLUDE_PATH_LIST.contains(requestURI)){ + return true; + } + //登录处理 + String token = request.getHeader("Authorization"); + if(StringUtils.isEmpty(token)) + token = request.getParameter("token"); + + String value = redisTemplate.opsForValue().get(token); + if(StringUtils.isEmpty(value)){ + return false; + } + LoginUserInfo loginUserInfo = objectMapper.convertValue(value, LoginUserInfo.class); + if(loginUserInfo == null || loginUserInfo.getId() <= 0){ + return false; + } + redisTemplate.expire(token, 86700, TimeUnit.SECONDS); + + //用户信息设置到上下文 + SessionContext.getInstance().set(loginUserInfo); + return HandlerInterceptor.super.preHandle(request, response, handler); + } + + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + HandlerInterceptor.super.afterCompletion(request, response, handler, ex); + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index a51e09b..fc79205 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,70 +1,24 @@ -#spring: -# datasource: -# dynamic: -# primary: master -# strict: true #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. -# hikari: -# minimum-idle: 4 -# maximum-pool-size: 4 -# connection-init-sql: SELECT 1 -# connection-test-query: SELECT 1 -# datasource: -# master: -# url: jdbc:mysql://rm-2vcg431j388xlt5541o.mysql.cn-chengdu.rds.aliyuncs.com:3306/nearby_travel?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai -# username: aliyun_test -# password: testRootZby!2020@ -# driver-class-name: com.mysql.cj.jdbc.Driver -# slave: -# url: jdbc:mysql://rm-2vcg431j388xlt5541o.mysql.cn-chengdu.rds.aliyuncs.com:3306/nearby_travel?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai -# username: aliyun_test -# password: testRootZby!2020@ -# driver-class-name: com.mysql.cj.jdbc.Driver -# cloud: -# config: -# enabled: false -# consul: -# host: 192.168.10.111 #139.224.207.104 -# port: 8500 -# config: -# # 是否启用配置中心,默认值 true 开启 -# enabled: false -# discovery: -# register: false # 是否需要注册 -#grpc: -# client: -# GLOBAL: -# security: -# enable-keep-alive: true -# keep-alive-without-calls: true -# negotiation-type: plaintext -# center-merchant: -# address: 'discovery:///center-merchant' -# # kdm 192.168.11.116 -# # gsj 192.168.10.43 -# # tc 192.168.9.62 -# # address: 'static://192.168.11.116:9999' -# enableKeepAlive: true -# keepAliveWithoutCalls: true -# center-user: -# address: 'discovery:///center-user' -# # address: 'static://192.168.10.43:8888' -# enableKeepAlive: true -# keepAliveWithoutCalls: true -# center-ocr: -# address: 'discovery:///center-merchant' -# # address: 'static://192.168.10.43:6566' -# enableKeepAlive: true -# keepAliveWithoutCalls: true -# center-contract: -# address: 'discovery:///center-contract' -# enableKeepAlive: true -# keepAliveWithoutCalls: true -# center-dataapi: -# address: 'static://192.168.8.126:9999' -# enableKeepAlive: true -# keepAliveWithoutCalls: true -# -# +spring: + datasource: + dynamic: + primary: master + strict: true #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. + hikari: + minimum-idle: 4 + maximum-pool-size: 4 + connection-init-sql: SELECT 1 + connection-test-query: SELECT 1 + datasource: + master: + url: jdbc:mysql://122.112.153.128:3306/xf-boot-base?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver + slave: + url: jdbc:mysql://122.112.153.128:3306/xf-boot-base?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver ##redis #redis: # dynamic: