From 66776f87a5675527b1eef5f0d6c203ed0d3605ef Mon Sep 17 00:00:00 2001
From: "Yangkai.Shen" <237497819@qq.com>
Date: Wed, 19 Dec 2018 21:02:43 +0800
Subject: [PATCH] =?UTF-8?q?:sparkles:=20spring-boot-demo-session=20?=
=?UTF-8?q?=E5=AE=8C=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 1 +
spring-boot-demo-session/.gitignore | 25 ++++
spring-boot-demo-session/README.md | 126 ++++++++++++++++++
spring-boot-demo-session/pom.xml | 73 ++++++++++
.../SpringBootDemoSessionApplication.java | 27 ++++
.../xkcoding/session/config/WebMvcConfig.java | 39 ++++++
.../xkcoding/session/constants/Consts.java | 21 +++
.../session/controller/PageController.java | 67 ++++++++++
.../interceptor/SessionInterceptor.java | 37 +++++
.../src/main/resources/application.yml | 27 ++++
.../src/main/resources/templates/index.html | 10 ++
.../src/main/resources/templates/login.html | 12 ++
...SpringBootDemoSessionApplicationTests.java | 17 +++
13 files changed, 482 insertions(+)
create mode 100644 spring-boot-demo-session/.gitignore
create mode 100644 spring-boot-demo-session/README.md
create mode 100644 spring-boot-demo-session/pom.xml
create mode 100644 spring-boot-demo-session/src/main/java/com/xkcoding/session/SpringBootDemoSessionApplication.java
create mode 100644 spring-boot-demo-session/src/main/java/com/xkcoding/session/config/WebMvcConfig.java
create mode 100644 spring-boot-demo-session/src/main/java/com/xkcoding/session/constants/Consts.java
create mode 100644 spring-boot-demo-session/src/main/java/com/xkcoding/session/controller/PageController.java
create mode 100644 spring-boot-demo-session/src/main/java/com/xkcoding/session/interceptor/SessionInterceptor.java
create mode 100644 spring-boot-demo-session/src/main/resources/application.yml
create mode 100644 spring-boot-demo-session/src/main/resources/templates/index.html
create mode 100644 spring-boot-demo-session/src/main/resources/templates/login.html
create mode 100644 spring-boot-demo-session/src/test/java/com/xkcoding/session/SpringBootDemoSessionApplicationTests.java
diff --git a/pom.xml b/pom.xml
index 487cf7e..5551683 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,6 +35,7 @@
+ * 启动类 + *
+ * + * @package: com.xkcoding.session + * @description: 启动类 + * @author: yangkai.shen + * @date: Created in 2018-12-19 19:35 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@SpringBootApplication +public class SpringBootDemoSessionApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringBootDemoSessionApplication.class, args); + } + +} + diff --git a/spring-boot-demo-session/src/main/java/com/xkcoding/session/config/WebMvcConfig.java b/spring-boot-demo-session/src/main/java/com/xkcoding/session/config/WebMvcConfig.java new file mode 100644 index 0000000..2528935 --- /dev/null +++ b/spring-boot-demo-session/src/main/java/com/xkcoding/session/config/WebMvcConfig.java @@ -0,0 +1,39 @@ +package com.xkcoding.session.config; + +import com.xkcoding.session.interceptor.SessionInterceptor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + *+ * WebMvc 配置类 + *
+ * + * @package: com.xkcoding.session.config + * @description: WebMvc 配置类 + * @author: yangkai.shen + * @date: Created in 2018-12-19 19:50 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Configuration +public class WebMvcConfig implements WebMvcConfigurer { + @Autowired + private SessionInterceptor sessionInterceptor; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + InterceptorRegistration sessionInterceptorRegistry = registry.addInterceptor(sessionInterceptor); + // 排除不需要拦截的路径 + sessionInterceptorRegistry.excludePathPatterns("/page/login"); + sessionInterceptorRegistry.excludePathPatterns("/page/doLogin"); + sessionInterceptorRegistry.excludePathPatterns("/error"); + + // 需要拦截的路径 + sessionInterceptorRegistry.addPathPatterns("/**"); + } +} diff --git a/spring-boot-demo-session/src/main/java/com/xkcoding/session/constants/Consts.java b/spring-boot-demo-session/src/main/java/com/xkcoding/session/constants/Consts.java new file mode 100644 index 0000000..38cf8f3 --- /dev/null +++ b/spring-boot-demo-session/src/main/java/com/xkcoding/session/constants/Consts.java @@ -0,0 +1,21 @@ +package com.xkcoding.session.constants; + +/** + *+ * 常量池 + *
+ * + * @package: com.xkcoding.session.constants + * @description: 常量池 + * @author: yangkai.shen + * @date: Created in 2018-12-19 19:42 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +public interface Consts { + /** + * session保存的key + */ + String SESSION_KEY = "key:session:token"; +} diff --git a/spring-boot-demo-session/src/main/java/com/xkcoding/session/controller/PageController.java b/spring-boot-demo-session/src/main/java/com/xkcoding/session/controller/PageController.java new file mode 100644 index 0000000..d6b4756 --- /dev/null +++ b/spring-boot-demo-session/src/main/java/com/xkcoding/session/controller/PageController.java @@ -0,0 +1,67 @@ +package com.xkcoding.session.controller; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.xkcoding.session.constants.Consts; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +/** + *+ * 页面跳转 Controller + *
+ * + * @package: com.xkcoding.session.controller + * @description: 页面跳转 Controller + * @author: yangkai.shen + * @date: Created in 2018-12-19 19:57 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Controller +@RequestMapping("/page") +public class PageController { + /** + * 跳转到 首页 + * + * @param request 请求 + */ + @GetMapping("/index") + public ModelAndView index(HttpServletRequest request) { + ModelAndView mv = new ModelAndView(); + + String token = (String) request.getSession().getAttribute(Consts.SESSION_KEY); + mv.setViewName("index"); + mv.addObject("token", token); + return mv; + } + + /** + * 跳转到 登录页 + * + * @param redirect 是否是跳转回来的 + */ + @GetMapping("/login") + public ModelAndView login(Boolean redirect) { + ModelAndView mv = new ModelAndView(); + + if (ObjectUtil.isNotNull(redirect) && ObjectUtil.equal(true, redirect)) { + mv.addObject("message", "请先登录!"); + } + mv.setViewName("login"); + return mv; + } + + @GetMapping("/doLogin") + public String doLogin(HttpSession session) { + session.setAttribute(Consts.SESSION_KEY, IdUtil.fastUUID()); + + return "redirect:/page/index"; + } +} diff --git a/spring-boot-demo-session/src/main/java/com/xkcoding/session/interceptor/SessionInterceptor.java b/spring-boot-demo-session/src/main/java/com/xkcoding/session/interceptor/SessionInterceptor.java new file mode 100644 index 0000000..c797655 --- /dev/null +++ b/spring-boot-demo-session/src/main/java/com/xkcoding/session/interceptor/SessionInterceptor.java @@ -0,0 +1,37 @@ +package com.xkcoding.session.interceptor; + +import com.xkcoding.session.constants.Consts; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +/** + *+ * 校验Session的拦截器 + *
+ * + * @package: com.xkcoding.session.interceptor + * @description: 校验Session的拦截器 + * @author: yangkai.shen + * @date: Created in 2018-12-19 19:40 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Component +public class SessionInterceptor extends HandlerInterceptorAdapter { + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + HttpSession session = request.getSession(); + if (session.getAttribute(Consts.SESSION_KEY) != null) { + return true; + } + // 跳转到登录页 + String url = "/page/login?redirect=true"; + response.sendRedirect(request.getContextPath() + url); + return false; + } +} diff --git a/spring-boot-demo-session/src/main/resources/application.yml b/spring-boot-demo-session/src/main/resources/application.yml new file mode 100644 index 0000000..c0da8e6 --- /dev/null +++ b/spring-boot-demo-session/src/main/resources/application.yml @@ -0,0 +1,27 @@ +server: + port: 8080 + servlet: + context-path: /demo +spring: + session: + store-type: redis + redis: + flush-mode: immediate + namespace: "spring:session" + redis: + host: localhost + port: 6379 + # 连接超时时间(记得添加单位,Duration) + timeout: 10000ms + # Redis默认情况下有16个分片,这里配置具体使用的分片 + # database: 0 + lettuce: + pool: + # 连接池最大连接数(使用负值表示没有限制) 默认 8 + max-active: 8 + # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1 + max-wait: -1ms + # 连接池中的最大空闲连接 默认 8 + max-idle: 8 + # 连接池中的最小空闲连接 默认 0 + min-idle: 0 \ No newline at end of file diff --git a/spring-boot-demo-session/src/main/resources/templates/index.html b/spring-boot-demo-session/src/main/resources/templates/index.html new file mode 100644 index 0000000..843cf73 --- /dev/null +++ b/spring-boot-demo-session/src/main/resources/templates/index.html @@ -0,0 +1,10 @@ + + + + +