Spring Security

什么是会话固定攻击?Spring Boot 中要如何防御会话固定攻击?

[亡魂溺海] 提交于 2020-08-05 17:30:48
前两天和大家聊了 Spring Security 中的 session 并发问题,和小伙伴们聊了如何像 QQ 一样,用户在一台设备上登录成功之后,就会自动踢掉另一台设备上的登录。 当然,Spring Security 中,关于 session 的功能不仅仅是这些,之前和大家说 我们学习 Spring Security,也是学习各种各样的网络攻击与防御策略 ,今天松哥就来和大家聊一个简单的:什么是会话固定攻击以及 Spring Security 中如何防止会话固定攻击。 本文是 Spring Security 系列的第 16 篇,阅读本系列前面的文章有助于更好的理解本文: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密码怎么解密了 手把手教你定制 Spring Security 中的表单登录 Spring Security 做前后端分离,咱就别做页面跳转了!统统 JSON 交互 Spring Security 中的授权操作原来这么简单 Spring Security 如何将用户数据存入数据库? Spring Security+Spring Data Jpa 强强联手,安全管理只有更简单! Spring Boot + Spring Security 实现自动登录功能 Spring Boot 自动登录,安全风险要怎么控制?

花式玩 Spring Security ,这样的用户定义方式你可能没见过!

拥有回忆 提交于 2020-08-05 13:07:04
有的时候松哥会和大家分享一些 Spring Security 的冷门用法,不是为了显摆,只是希望大家能够从不同的角度加深对 Spring Security 的理解,这些冷门的用法非常有助于大家理解 Spring Security 的内部工作原理。我本来可以纯粹的去讲源码,讲原理,但是那样太枯燥了,所以我会尽量通过一些小的案例来帮助大家理解源码,这些案例的目的只是为了帮助大家理解 Spring Security 源码,仅此而已!所以请大家不要和我抬杠这些用户定义方式没用! 好啦,我今天要给大家表演一个绝活,就是花式定义用户对象。希望大家通过这几个案例,能够更好的理解 ProviderManager 的工作机制。 本文内容和上篇文章【 深入理解 AuthenticationManagerBuilder 【源码篇】 】内容强关联,所以强烈建议先学习下上篇文章内容,再来看本文,就会好理解很多。 1.绝活一 先来看如下一段代码: @Configuration public class SecurityConfig { @Bean UserDetailsService us() { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(User.withUsername

深入理解 FilterChainProxy【源码篇】

。_饼干妹妹 提交于 2020-08-05 12:43:18
昨天有小伙伴加松哥微信,说他把松哥的 Spring Security 系列撸完了。。 but 松哥这个系列还没发完呢,在我的计划中,Spring Security 系列目前应该能更新一半,还剩一半,虽然有的小伙伴可能觉得好像已经没啥了,其实还有很多东西。。。 松哥最近也是特别忙,Security 更新慢下来了,但是秉持前面说的,要学就成系列的学,要学就学透彻,这个系列我还会继续更下去。 今天我们就来聊一聊 Spring Security 系列中的 FilterChainProxy。 这是一个非常重要的代理对象。 1. FilterChainProxy 我们先来回顾一下前面文章讲的: 在一个 Web 项目中,请求流程大概如下图所示: 请求从客户端发起(例如浏览器),然后穿过层层 Filter,最终来到 Servlet 上,被 Servlet 所处理。 上图中的 Filter 我们可以称之为 Web Filter,Spring Security 中的 Filter 我们可以称之为 Security Filter,它们之间的关系如下图: 可以看到,Spring Security Filter 并不是直接嵌入到 Web Filter 中的,而是通过 FilterChainProxy 来统一管理 Spring Security Filter,FilterChainProxy 本身则通过

Spring Boot+CAS 默认登录页面太丑了,怎么办?

最后都变了- 提交于 2020-08-05 04:22:45
最近的又一头扎进 Spring Security+CAS 上面了,CAS 单点登录已经连续写了四篇了,小伙伴们一定按顺序阅读哦,这样后面的文章才好理解。 上篇文章 和大家分享了 CAS Server 接入数据库的问题,今天我们来看下如何在 CAS Server 上自定义登录页面,因为正常来说,我们是不会直接用官方给出的登录页面的。 本文是 Spring Security 系列第 26 篇,阅读前面文章有助于更好的理解本文: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密码怎么解密了 手把手教你定制 Spring Security 中的表单登录 Spring Security 做前后端分离,咱就别做页面跳转了!统统 JSON 交互 Spring Security 中的授权操作原来这么简单 Spring Security 如何将用户数据存入数据库? Spring Security+Spring Data Jpa 强强联手,安全管理只有更简单! Spring Boot + Spring Security 实现自动登录功能 Spring Boot 自动登录,安全风险要怎么控制? 在微服务项目中,Spring Security 比 Shiro 强在哪? SpringSecurity 自定义认证逻辑的两种方式(高级玩法)

SpringBoot集成Spring Security

限于喜欢 提交于 2020-08-05 02:50:19
1、Spring Security介绍 Spring security ,是一个强大的和高度可定制的身份验证和访问控制框架。它是确保基于Spring的应用程序的标准 ——来自官方参考手册 Spring security 和 shiro 一样,具有认证、授权、加密等用于权限管理的功能。和 shiro 不同的是, Spring security 拥有比 shiro 更丰富的功能,并且,对于 Springboot 而言, Spring Security 比 Shiro 更合适一些,因为都是 Spring 家族成员。今天,我们来为 SpringBoot 项目集成 Spring Security 。 本文所使用的版本: ​ SpringBoot : 2.2.6.RELEASE ​ Spring Security : 5.2.2.RELEASE 2、配置Spring Security 在 SpringBoot 中集成 Spring Security 很简单,只需要在pom.xml中添加下面代码就行: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> 这里可以不指定 Spring Security

小书MybatisPlus第4篇-表格分页与下拉分页查询

自闭症网瘾萝莉.ら 提交于 2020-08-04 19:14:53
本文为mybatis系列文档的第4篇,前三篇请访问下面的网址。 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小书MybatisPlus第3篇-自定义SQL 一、让Spring Boot-MybatisPlus支持分页 在已经集成了Mybatis Plus的Spring项目中加入如下分页拦截器的配置,让MybatisPlus支持分页 [@Configuration](https://my.oschina.net/pointdance) public class MybatisPlusConfiguration { //配置分页拦截器 [@Bean](https://my.oschina.net/bean) public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } } 二、单表查询分页-表格分页 [@Test](https://my.oschina.net/azibug) public void testSelect() { LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>(); query.ge(User

shiro的认证、授权、会话、加密

北战南征 提交于 2020-08-04 17:50:05
shiro shiro是一个基于java的开源的安全管理框架,可以完成认证,授权,会话管理,加密,缓存功能。 为什么学习shiro 在java的世界中,安全管理框架有spring security和shiro。spring security主要依赖于spring,并且比较复杂,学习曲线较高。shiro比较简单,而且其比较独立,既可以javaSE中使用,也可以在javaEE中使用,并且在分布式集群的环境下也可以使用。 shiro的结构体系 Authentication认证:验证用户是否合法。==>就是验证登录; Authorization授权:授予谁具有访问某些资源的权限; SessionManagement:会话管理,用户登录后的用户信息通过SessionManagent进行管理,不管是在什么应用中 Cryphography:提供了一些常见的加密算法,使得在应用中可以很方便的实现数据安全。 WebSupport:提供web应用程序支持 Caching缓存:提供了对缓存的支持,支持多种缓存架构:如ehcache,还支持缓存数据库-redis Concurrency:支持多线程并发访问 Testing:测试 Run As:支持一个用户在允许的前提下使用另一个身份进行登录; RememberMe:记住我 Subject=身份+凭证====>用户名和密码【用户获取主体的信息

恕我直言你可能真的不会java第6篇:Stream性能差?不要人云亦云

橙三吉。 提交于 2020-07-29 05:25:20
一、粉丝的反馈 问:stream比for循环慢5倍,用这个是为了啥? 答:互联网是一个新闻泛滥的时代,三人成虎,以假乱真的事情时候发生。作为一个技术开发者,要自己去动手去做,不要人云亦云。 的确,这位粉丝说的这篇文章我也看过,我就不贴地址了,也没必要给他带流量。怎么说呢?就是一个不懂得测试的、不入流开发工程师做的性能测试,给出了一个危言耸听的结论。 二、所有性能测试结论都是片面的 性能测试是必要的,但针对性能测试的结果,永远要持怀疑态度。为什么这么说? 性能测试脱离业务场景就是片面的性能测试。你能覆盖所有的业务场景么? 性能测试脱离硬件环境就是片面的性能测试。你能覆盖所有的硬件环境么? 性能测试脱离开发人员的知识面就是片面的性能测试。你能覆盖各种开发人员奇奇怪怪的代码么? 所以,我从来不相信网上的任何性能测试的文章。凡是我自己的从事的业务场景,我都要在接近生产环境的机器上自己测试一遍。 所有性能测试结论都是片面的,只有你生产环境下的运行结果才是真的。 三、动手测试Stream的性能 3.1.环境 windows10 、16G内存、i7-7700HQ 2.8HZ 、64位操作系统、JDK 1.8.0_171 3.2.测试用例与测试结论 我们在上一节,已经讲过: 针对不同的数据结构,Stream流的执行效率是不一样的 针对不同的数据源,Stream流的执行效率也是不一样的

Serverless 原生框架:Malagu Framework

谁说胖子不能爱 提交于 2020-07-28 20:15:02
背景 早期,Serverless Framework 的定位是偏运维侧,通过 Yaml 文件定义规则,Serverless Framework 负责部署到对应的云厂商。Serverless Framework 提供了一种方案去适配不同的云厂商。 最近 Serverless 提供了一个 Serverless Component 方案,这个方案更面向开发侧。在同一时间,Malagu Framework 也想到了 Component 类似的方案。 Malagu Framework 一开始定位就是偏开发侧的。Malagu Component 与 Serverless Component 解决的问题是一样的:适配不同平台的服务(阿里云函数计算、阿里云 oss、腾讯云函数、aws lambda 等等)和封装通用的业务代码。 Malagu Component 与 Serverless Component 设计上也存在不同的地方,后面可以单独写一篇文章介绍一下。 Malagu 由 CLI + Framework 组成,其中 Framework 本身就是基于 Malagu Component 实现。 简介 Malagu 是基于 TypeScript 的 Serverless First、可扩展和组件化的应用框架。 在 Malagu 的世界里 一切皆组件 ,应用也是组件:根组件

小书MybatisPlus第5篇-Active Record模式精讲

别说谁变了你拦得住时间么 提交于 2020-07-28 17:18:49
本文为一个系列中的第五节,前四节访问如下地址: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小书MybatisPlus第3篇-自定义SQL 小书MybatisPlus第4篇-表格分页与下拉分页查询 Active Record 适合非常简单的领域需求,尤其在领域模型和数据库模型十分相似的情况下。如果遇到更加复杂的领域模型结构(例如用到继承、策略的领域模型),往往需要使用分离数据源的领域模型,结合 Data Mapper (数据映射器)使用。 具体到使用层面,我们之前章节讲过使用Data Mapper 做数据的持久层操作。 User user = new User(); user.setName("字母哥"); user.setAge(18); userMapper.insert(user); //Mybatis Mapper模式 现在我们使用ActiveRecord模式,用法如下,注意二者的区别 User user = new User(); user.setName("zimug"); user.setAge(18); user.insert(); //ActiveRecord模式 一、使ActiveRecord模式生效 首先:需要让数据库表对应的数据持久层实体类。集成自Model<User>