结合Spring Security进行web应用会话安全管理

在本文中,将为大家说明如何结合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节》
本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
结合Spring Security进行web应用会话安全管理的更多相关文章
- 使用 Spring Security 保护 Web 应用的安全
安全一直是 Web 应用开发中非常重要的一个方面.从安全的角度来说,需要考虑用户认证和授权两个方面.为 Web 应用增加安全方面的能力并非一件简单的事情,需要考虑不同的认证和授权机制.Spring S ...
- spring mvc 和spring security配置 web.xml设置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...
- spring security之web应用安全
一.什么是web应用安全,为了安全我们要做哪些事情? 保护web资源不受侵害(资源:用户信息.用户财产.web数据信息等)对访问者的认证.授权,指定的用户才可以访问资源访问者的信息及操作得到保护(xs ...
- Spring Security 从配置入门 学习讲解。万恶之源------------web.xml
这段时间,工作闲了下来,接触了Spring Security,对于我一个基础很差的人来说,无疑是个挑战啊. 经过一段时间的摸索,终于有了点眉目,在这里,要特别感谢http://blog.csdn.ne ...
- spring security源码分析之web包分析
Spring 是一个非常流行和成功的 Java 应用开发框架.Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案.一般来说,Web 应用的安全性包括 ...
- Spring Security(三十七):Part IV. Web Application Security
Most Spring Security users will be using the framework in applications which make user of HTTP and t ...
- Spring Security Web应用入门环境搭建
在使用Spring Security配置Web应用之前,首先要准备一个基于Maven的Spring框架创建的Web应用(Spring MVC不是必须的),本文的内容都是基于这个前提下的. pom.xm ...
- Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】
源码请移步至:https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc 版 ...
- Spring Security:用户和Spring应用之间的安全屏障
摘要:Spring Security是一个安全框架,作为Spring家族的一员. 本文分享自华为云社区<[云驻共创]深入浅出Spring Security>,作者:香菜聊游戏. 一.前言 ...
随机推荐
- [Luogu1379]八数码难题
题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...
- Cocos Creator 中 _worldMatrix 到底是什么(中)
Cocos Creator 中 _worldMatrix 到底是什么(中) 1. 中篇摘要 在上篇中主要做了三件事 简单表述了矩阵的基本知识,以及需要涉及到的三角函数知识 推导了图形变换中 位移 .旋 ...
- codeforce - 13A A.Numbers
A. Numbers time limit per test 1 second memory limit per test 64 megabytes input standard input outp ...
- 简单的Dos Unity操作(debug)
使用adb命令启动Unity app,eg: adb shell am start -S -a android.intent.action.MAIN -n co.spe3d.sticker/com.u ...
- Nginx、WSGI、 uWSGI、 uwsgi的区别
当我们部署完一个应用程序,浏览网页时具体的过程是怎样的呢?首先我们得有一个 Web 服务器来处理 HTTP 协议的内容,Web 服务器获得客户端的请求,交给应用程序,应用程序处理完,返回给 Web 服 ...
- ansible模块之command、shell、script、file、copy、fetch
前戏 ansible 批量在远程主机上执行命令 openpyxl 操作excel表格 puppet ansible slatstack ansible epel源 第一步: 下载epel源 wget ...
- 认识JVM的内存分配
当我们在JVM中运行一段程序代码,JVM初始运行的时候都会分配好Method Area(方法区)和Heap(堆),而JVM每遇到一个线程,就为其分配一个Program Counter Register ...
- Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException 异常
Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException 报此异常是应为有相同的bean ...
- SSM简易版
技术准备 Java: 基础知识 框架: Spring,SpringMVC,Mybatis 数据库: Mysq 开发工具: Eclipse,Maven 项目结构 数据库设计 创建数据库:student ...
- VMware问题--无法获得 VMCI 驱动程序的版本: 句柄无效
关于VMware问题:无法获得 VMCI 驱动程序的版本: 句柄无效.驱动程序“vmci.sys”的版本不正确 问题截图: 解决 1.根据配置文件路径找到对应的.vmx文件: 2.用编辑器打开,找到v ...