Spring Boot中的会话管理

Spring Boot中的会话管理

大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来聊聊Spring Boot中的会话管理。会话管理是Web应用中非常重要的一部分,它能够确保用户在整个交互过程中拥有一致的体验。Spring Boot提供了多种方式来管理会话,本文将详细介绍这些方式,并提供实际的代码示例。

一、会话管理概述

会话管理主要涉及以下几个方面:

  1. 会话的创建和销毁:管理用户会话的生命周期,包括会话的创建、维护和销毁。
  2. 会话的持久化:将会话信息存储在服务器或其他存储介质中,以确保会话在多台服务器之间共享。
  3. 会话的安全性:确保会话信息的安全性,防止会话劫持和篡改。

二、Spring Boot中的会话配置

Spring Boot默认使用基于内存的会话管理,这对于小型应用或开发环境来说已经足够。但对于需要在多台服务器之间共享会话的大型应用,我们通常会使用基于数据库、Redis等的会话存储方案。

三、基于内存的会话管理

基于内存的会话管理是Spring Boot的默认配置,适用于单节点的简单应用。下面是一个简单的示例:

  1. 创建Controller
package cn.juwatech.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpSession;

@Controller
@RequestMapping("/session")
public class SessionController {

    @GetMapping("/set")
    public String setSession(HttpSession session) {
        session.setAttribute("user", "微赚淘客系统用户");
        return "sessionSet";
    }

    @GetMapping("/get")
    public String getSession(HttpSession session, Model model) {
        String user = (String) session.getAttribute("user");
        model.addAttribute("user", user);
        return "sessionGet";
    }
}
  1. 创建视图

src/main/resources/templates目录下创建两个HTML文件:

sessionSet.html

<!DOCTYPE html>
<html>
<head>
    <title>Session Set</title>
</head>
<body>
    <h1>会话已设置</h1>
</body>
</html>

sessionGet.html

<!DOCTYPE html>
<html>
<head>
    <title>Session Get</title>
</head>
<body>
    <h1>获取的会话用户:<span th:text="${user}"></span></h1>
</body>
</html>

四、基于Redis的会话管理

对于需要在多台服务器之间共享会话的应用,可以使用Redis来存储会话信息。下面是配置示例:

  1. 添加依赖

pom.xml中添加Redis相关依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
  1. 配置Redis

application.properties中添加Redis配置:

spring.redis.host=localhost
spring.redis.port=6379

spring.session.store-type=redis
  1. 创建Redis配置类
package cn.juwatech.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

@Configuration
@EnableRedisHttpSession
public class RedisConfig {

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory();
    }
}

五、会话过期与清理

会话的过期时间和清理策略可以根据需求进行配置。在application.properties中设置会话超时时间:

server.servlet.session.timeout=30m

对于Redis会话,还可以在Redis配置中设置:

spring.session.redis.namespace=spring:session
spring.session.redis.flush-mode=immediate
spring.session.redis.cleanup-cron=0 * * * * *

六、会话的安全性

为了确保会话的安全性,需要采取以下措施:

  1. 启用HTTPS:确保所有会话通信使用HTTPS加密。
  2. 使用安全的Cookie属性:启用HttpOnlySecure属性,防止XSS攻击和网络监听。

application.properties中配置:

server.servlet.session.cookie.http-only=true
server.servlet.session.cookie.secure=true
  1. 会话固定攻击防护:防止会话固定攻击,强制在认证时更改会话ID。

在Spring Security配置中启用会话固定攻击防护:

package cn.juwatech.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.sessionManagement()
            .sessionFixation().migrateSession();
    }
}

七、总结

本文介绍了Spring Boot中的会话管理,包括基于内存和基于Redis的会话存储方案,并讨论了会话的安全性和配置方法。通过这些示例和配置,大家可以在实际项目中灵活应用会话管理策略,确保用户在整个交互过程中拥有一致、安全的体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/769395.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第11章 规划过程组(二)(11.8排列活动顺序)

第11章 规划过程组&#xff08;二&#xff09;11.8排列活动顺序&#xff0c;在第三版教材第388~389页&#xff1b;文字图片音频方式 第一个知识点&#xff1a;主要工具与技术&#xff08;重要知识点&#xff09; 1、紧前关系绘图法&#xff08;PDM&#xff09;或前导图法&#…

宝塔Linux面板配置环境 + 创建站点

一、安装 &#xff08;1&#xff09;进入宝塔官网 https://www.bt.cn/new/index.html &#xff08;2&#xff09;点击“ 立即免费安装 ”&#xff0c;选择 Centos安装脚本 &#xff08;3&#xff09;进入 ssh 输入以下命令安装宝塔 yum install -y wget && wget -O …

【Docker安装】OpenEuler系统下部署Docker环境

【Docker安装】OpenEuler系统下部署Docker环境 前言一、本次实践介绍1.1 本次实践规划1.2 本次实践简介二、检查本地环境2.1 检查操作系统版本2.2 检查内核版本2.3 检查yum仓库三、卸载Docker四、部署Docker环境4.1 配置yum仓库4.2 检查可用yum仓库4.3 安装Docker4.4 检查Docke…

Golang 依赖注入设计哲学|12.6K 的依赖注入库 wire

一、前言 线上项目往往依赖非常多的具备特定能力的资源&#xff0c;如&#xff1a;DB、MQ、各种中间件&#xff0c;以及随着项目业务的复杂化&#xff0c;单一项目内&#xff0c;业务模块也逐渐增多&#xff0c;如何高效、整洁管理各种资源十分重要。 本文从“术”层面&#…

Linux高并发服务器开发(十一)UDP通信和本地socket通信

文章目录 1 TCP和UDP的区别2 UDPAPI流程服务端流程客户端流程 代码服务端客户端 3 本地socket通信服务端客户端客户端代码 1 TCP和UDP的区别 2 UDP API 流程 服务端流程 客户端流程 代码 服务端 #include<sys/socket.h> #include<stdio.h> #include<arpa/in…

图像增强方法汇总OpenCV+python实现【第一部分:常用图像增强方法】

图像增强方法汇总OpenCVpython实现【第一部分】 前言常用的图像增强方法1. 旋转&#xff08;Rotation&#xff09;&#xff1a;2. 平移&#xff08;Translation&#xff09;&#xff1a;3. 缩放&#xff08;Scaling&#xff09;&#xff1a;4. 剪切变换&#xff08;Shear Trans…

Mac本地部署大模型-单机运行

前些天在一台linux服务器&#xff08;8核&#xff0c;32G内存&#xff0c;无显卡&#xff09;使用ollama运行阿里通义千问Qwen1.5和Qwen2.0低参数版本大模型&#xff0c;Qwen2-1.5B可以运行&#xff0c;但是推理速度有些慢。 一直还没有尝试在macbook上运行测试大模型&#xf…

bug,属性注入时为null

因为在使用拦截器时使用的是new的这个类放容器的 解决方法&#xff1a; 使用有参构造器&#xff0c;在new对象时传入值

SpringBoot 通过Knife4j集成API文档 在线调试

介绍 Knife4j 是一款基于 Swagger 构建的增强型 API 文档生成工具&#xff0c;它提供了更多的定制化功能和界面优化&#xff0c;使得生成的 API 文档更加美观和易用。它可以帮助开发者快速生成和管理 API 文档&#xff0c;支持在线调试和交互。 依赖 <!--knife4j--> &…

使用Python3和Selenium打造百度图片爬虫

开篇 本文的目的在于实现一个用来爬取百度图片的爬虫程序,因该网站不需要登录&#xff0c;所以相对来说较为简单。下面的爬虫程序中我写了比较多的注释&#xff0c;以便于您的理解。 准备 请确保电脑上已经安装了与chrome浏览器版本匹配的chromeDriver&#xff0c;且电脑中已经…

【C++】解决 C++ 语言报错:Dangling Pointer

文章目录 引言 悬挂指针&#xff08;Dangling Pointer&#xff09;是 C 编程中常见且危险的错误之一。当程序试图访问指向已释放内存的指针时&#xff0c;就会发生悬挂指针错误。这种错误不仅会导致程序崩溃&#xff0c;还可能引发不可预测的行为和安全漏洞。本文将深入探讨悬…

C++ | Leetcode C++题解之第214题最短回文串

题目&#xff1a; 题解&#xff1a; class Solution { public:string shortestPalindrome(string s) {int n s.size();vector<int> fail(n, -1);for (int i 1; i < n; i) {int j fail[i - 1];while (j ! -1 && s[j 1] ! s[i]) {j fail[j];}if (s[j 1] …

【Linux】--help,man page , info page

我们知道Linux有很多的命令&#xff0c;那LInux要不要背命令&#xff1f; 答案是背最常用的那些就行了 那有的时候我们想查询一些命令的详细用法该怎么办呢&#xff1f; 这里我给出3种方法 1.--help --help的使用方法很简单啊 要查询的命令 --help 我们看个例子 这里我只…

Object 类中的公共方法详解

Object 类中的公共方法详解 1、clone() 方法2、equals(Object obj) 方法3、hashCode() 方法4、getClass() 方法5、wait() 方法6、notify() 和 notifyAll() 方法 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在 Java 中&#xff0c;Object…

Redis的八种数据类型介绍

Redis 是一个高性能的键值存储&#xff0c;它支持多种丰富的数据类型。每种数据类型都有其特定的用途和底层实现。下面我将介绍 Redis 支持的主要数据类型及其背后的数据结构。 本人这里还有几篇详细的Redis用法文章&#xff0c;可以用来进阶康康&#xff01; 1. 字符串 (Stri…

c++习题08-计算星期几

目录 一&#xff0c;问题 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;问题 二&#xff0c;思路 首先&#xff0c;需要注意到的是3^2000这个数值很大&#xff0c;已经远远超过了long long 数据类型能够表示的范围&#xff0c;如果想要使用指定的数据类型来保存…

Docker实现Redis主从,以及哨兵机制

Docker实现Redis主从,以及哨兵机制 目录 Docker实现Redis主从,以及哨兵机制准备Redis镜像创建Redis主节点配置文件启动Redis从节点确认主从连接哨兵主要功能配置哨兵文件创建Redis哨兵的Docker容器 要通过Docker实现Redis的主从&#xff08;master-slave&#xff09;复制&#…

【WebGIS干货分享】Webgis 面试题-浙江中海达

1、Cesium 中有几种拾取坐标的方式&#xff0c;分别介绍 Cesium 是一个用于创建 3D 地球和地理空间应用的 JavaScript 库。在 Cesium 中&#xff0c;你可以使用不同的方式来拾取坐标&#xff0c;以便与地球或地图上的对象进行交 互。以下是 Cesium 中几种常见的拾取坐标的方式…

重载与覆写介绍

方法重载&#xff08;Overloading&#xff09; 方法重载是指在同一个类中定义多个方法&#xff0c;它们具有相同的名字但参数列表不同。这是通过改变参数的数量、类型的种类或次序来实现的。例如&#xff1a; public class OverloadingExample { // 方法重载可以通过参数的数…

# Sharding-JDBC从入门到精通(8)- 综合案例(一)数据库设计搭建与分片策略配置

Sharding-JDBC从入门到精通&#xff08;8&#xff09;- 综合案例&#xff08;一&#xff09;数据库设计搭建与分片策略配置 一、Sharding-JDBC 综合案例-数据库设计 1、案例 需求描述&#xff1a;本案例实现功能如下: 1、添加商品2、商品分页查询3、商品统计 2、数据库设计…