zoukankan      html  css  js  c++  java
  • spring boot学习笔记之简单实现session共享

    在平时开发中,往往会把一个项目部署在多个tomcat中,然后使用Nginx实现负载均衡,分发请求,将请求分发到不同的服务器中。由于session是在服务端创建的,第一次访问A服务器,那么session就会存在A服务器中,再次访问时由于负载均衡可能将请求分发到B服务器中,这时就获取不到之前的session信息了,所以需要实现session共享。

    使用IDEA创建一个spring boot项目,导入maven依赖,spring boot版本2.1.4版本以上连接redis需要引入security部分的依赖:

    <dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-data-redis</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-security</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.session</groupId>
    			<artifactId>spring-session-data-redis</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    			<exclusions>
    				<exclusion>
    					<groupId>org.junit.vintage</groupId>
    					<artifactId>junit-vintage-engine</artifactId>
    				</exclusion>
    			</exclusions>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.security</groupId>
    			<artifactId>spring-security-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    

    session共享需要借助redis,在application.properties中增加redis的配置信息:

    server.port=8082
    # redis基础配置
    # redis数据库索引(默认0)
    spring.redis.database=0
    # redis服务器地址
    spring.redis.host=127.0.0.1
    # redis服务器连接端口
    spring.redis.port=6379
    # redis服务器连接密码(默认为空)
    spring.redis.password=jinghx
    # 连接超时时间 单位毫秒 ms
    spring.redis.timeout=2000
    

    由于项目中需要导入spring boot security的依赖,否则会报错,这里只是一个演示项目,security不是重点,禁用以后使用会方便些:

    @SpringBootApplication
    // 禁用Security
    @EnableAutoConfiguration(exclude = {
            org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
    })
    public class SpringbootSessonApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootSessonApplication.class, args);
        }
    
    }
    

    创建一个Controller方便演示:

    @RestController
    public class HelloController {
    
        @Value("${server.port}")
        Integer port;
    
        @GetMapping("/login")
        public String set(String name, HttpSession session) {
            session.setAttribute("name", name);
            return "欢迎" + name + "登录端口号为" + port + "的系统!";
        }
    
        @GetMapping("/hello")
        public String get(HttpSession session) {
            return "hello," + session.getAttribute("name") + "现在系统端口号:" + port;
        }
    }
    

    将spring boot项目打包:
    在这里插入图片描述
    通过cmd命令行启动两个不同端口的项目:

    java -jar springboot-sesson-0.0.1-SNAPSHOT.jar --server.port=8081
    java -jar springboot-sesson-0.0.1-SNAPSHOT.jar
    

    在这里插入图片描述
    由于我们需要使用Nginx实现负载均衡,所以这里简单介绍一下Nginx的安装与配置:

    1.从官网下载:http://nginx.org/en/download.html
    在这里插入图片描述
    2.解压,启动Nginx:
    在这里插入图片描述
    3.验证Nginx是否安装成功,输入http://localhost:80
    在这里插入图片描述
    4.修改配置文件:

    upstream nginxtest{
    		# 代理IP
    		server 127.0.0.1:8081;
    		server 127.0.0.1:8082;
    	}
        server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / { # / 表示拦截所有
    			proxy_pass http://nginxtest; # 所有请求转发到http://nginxtest;
                #root   html;
                #index  index.html index.htm;
            }
    

    5.重启Nginx:

    nginx.exe -s reload
    

    Nginx安装配置好后,即可访问:http://localhost/login?name=张三,将name为“张三”设置到session中
    在这里插入图片描述
    然后访问:http://localhost/hello,多次刷新
    在这里插入图片描述
    在这里插入图片描述
    可看到在不同的系统中都可以从session中获取name属性,值为“张三”,至此一个简单的session共享项目已经实现了。

    一颗安安静静的小韭菜。文中如果有什么错误,欢迎指出。
  • 相关阅读:
    团队项目冲刺七
    团队项目冲刺六
    团队项目冲刺5
    团队项目冲刺4
    团队项目测试计划
    团队项目冲刺第三天进度和遇到问题
    团队项目冲刺第二天进度和问题
    博客园用户体验
    团队项目冲刺第一天进度和问题
    团队项目风险
  • 原文地址:https://www.cnblogs.com/c-Ajing/p/13448359.html
Copyright © 2011-2022 走看看