springsecurity中session失效后怎样处理_结合Spring Security进行web应用会话安全管理

news/2024/7/5 18:04:26

1c038c838c97409afe4c95004c08f50b.png

在本文中,将为大家说明如何结合Spring Security 和Spring Session管理web应用的会话。

一、Spring Security创建使用session的方法

Spring Security提供4种方式精确的控制会话的创建:

  • always:如果当前请求没有session存在,Spring Security创建一个session。
  • ifRequired(默认): Spring Security在需要时才创建session
  • never: Spring Security将永远不会主动创建session,但是如果session已经存在,它将使用该session
  • stateless:Spring Security不会创建或使用任何session。适合于接口型的无状态应用,该方式节省资源。

在Spring Security配置中加入session创建的策略。继承WebSecurityConfigurerAdapter ,重写configure(HttpSecurity http) 方法

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.sessionManagement()
        .sessionCreationPolicy(
                SessionCreationPolicy.IF_REQUIRED
        )
}

重要的是:该配置只能控制Spring Security如何创建与使用session,而不是控制整个应用程序。如果我们不明确指定,Spring Security可能不会创建session,但是我们的应用程序可能会创建session(一般spring应用的session管理交由Spring Session进行)!

二、会话超时管理

2.1 会话超时处理

会话超时之后,我们通常希望应用跳转到一个指定的URL,显示会话超时信息。可以使用如下的配置的代码实现。

    http.sessionManagement()
          .expiredUrl("/sessionExpired.html")   //超时session
          .invalidSessionUrl("/invalidSession.html");    //非法session

2.2.会话超时时间配置

在Spring boot应用中有两种设置会话超时时间的方式,Spring Security对这两种方式完全兼容,即:当会话超时之后用户需要重新登录才能访问应用:

  • server.servlet.session.timeout=15m
  • spring.session.timeout = 15m

第一种方式是springBoot应用自带的session超时配置,第二种方式是我们使用Spring Session之后,提供的session超时配置。第二种方式的优先级更高。

三、Spring Security的会话固化保护

session-fixation-protection 即session的固化保护功能,该功能的目的是一定程度上防止非法用户窃取用户session及cookies信息,进而模拟session的行为。默认情况下,Spring Security启用了migrationSession保护方式。即对于同一个cookies的SESSIONID用户,每次登录验证将创建一个新的HTTP会话,旧的HTTP会话将无效,并且旧会话的属性将被复制。

    http.sessionManagement() .sessionFixation().migrateSession()

如果这不是您需要的方式,则可以使用其他两个选项:

  • 设置为“none”时,原始会话不会无效
  • 设置“newSession”后,将创建一个干净的会话,而不会复制旧会话中的任何属性

四、Cookie的安全

熟悉Session实现原理的朋友一定都知道,提高Cookies的安全性,实际上就是提高session的安全性。在Spring Boot中可以通过配置方式来实现:

server.servlet.session.cookie.http-only=true
server.servlet.session.cookie.secure=true
  • httpOnly:如果为true,则浏览器脚本将无法访问cookie
  • secure:如果为true,则仅通过HTTPS连接发送cookie,HTTP无法携带cookie。

期待您的关注

  • 博主最近新写了一本书:《手摸手教您学习SpringBoot系列-16章97节》
  • 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。

http://www.niftyadmin.cn/n/4390361.html

相关文章

linux cat最新,linux cat

Linux命令总结—cat命令(1)命令功能cat命令用于将多个文件连接,并将结果通过标准输出显示出来。(2)命令语法cat(选项) (参数)(3)选项说明-n或-number:由1开始对所有输出的行数编号;-b或—number-nonblank:和-n相似,只不…

(四)mybatis缓存、事务、插件的基本知识

mybatis缓存、事务、插件的基础 一、缓存 (一)一级缓存与二级缓存 一级缓存 为了获得更好的性能,最重要的就是一级缓存。每个session对象维持一个一级缓存,session对象创建时缓存创建,session对象释放时缓存销毁。 缓存…

c语言typedef作用,C语言typedef的使用

C语言typedef的使用typedef 关键字能帮助你简化复杂的定义并让你的代码简洁可靠,当然,可靠这一点我还是持保留态度,因人而异吧。具体是如何使用呢?以下仅供参考!具体方法如下:C 语言提供 typedef 关键字&am…

mysql时间戳14小时_SpringBoot时间戳与MySql数据库记录相差14小时排错

项目中遇到存储的时间戳与真实时间相差14小时的现象,以下为解决步骤.问题CREATE TABLE incident (id int(11) NOT NULL AUTO_INCREMENT,created_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,recovery_time timestamp NULL DEFAULT NULL,PRIMARY KEY (id)) ENGINEInnoDB…

sql插入日期_SQL入门基础-了解SQL

通过上述的四个步骤,来进入sql的学习。什么是数据库?什么是SQL?数据库是用来存储数据的工具。那和excel有什么区别呢?excel像一个移动硬盘,而数据库像一个网盘,可供多人在上面操作。我们接下来聊的数据库主要是关系数…

输出英文字母的后继字母 c语言,Java 【打印俄文的英文字母】

俄文的的字符可以用 A 到 Я 。public class main {public static void main(String args[]) {char S А, C Я;System.out.println("俄文字母共有:" ((int) C - (int) S 1) "个");for (char i S; i < C; i) {System.out.print(i " ")…

python requests 发起http POST 请求

python requests 发起http POST 请求&#xff0c;带参数&#xff0c;带请求头&#xff1a; #!/usr/bin/env python # -*- coding: utf-8 -*-import requests import jsonurl http://official-account/app/messages/group body {"type": "text", "co…

aprioir算法_DW-DM实验(李向东)Clementine7(关联规则9章).doc

Clementine 关联规则【流9(9.2).str】9.2.3 Apriori算法的应用示例这里&#xff0c;利用Clementine提供的超市顾客个人信息和他们的一次购买商品数据&#xff0c;讲解Aprioir算法的具体操作。数据文件名为BASKETS.txt&#xff0c;为文本格式文件。数据包括两大部分的内容&#…