05 2021 档案
摘要:基于方法的权限管理主要是通过AOP实现的 Spring Security中通过MethodSecurityInterceptor来提供相关的实现,不同在于FilterSecurityInterceptor只是在请求之前进行前置处理,MethodSecurityInterceptor除了前置处理之外还
阅读全文
摘要:我们在使用spring Security时,需要注意authorizeRequests的顺序 @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .anyR
阅读全文
摘要:基于URL地址的权限管理主要是通过过滤器FilterSecurityInterceptor来实现。如果开发者配置了基于URL地址的权限管理,那么FilterSecurityInterceptor就会被自动添加到Spring Security过滤器链中,在过滤器链中拦截下请求,然后分析当前用户是否具备
阅读全文
摘要:在做位运算相关算法题时,经常需要我们提取二进制最右边的一位1,接下来我们就讲讲关于二进制最右边一位1的操作 ##获取二进制中最右边的1 也叫lowbit算法 x&(-x) 就是这么简洁,就能实现获取到二进制中最右边的 1,且其它位设置为 0。 原因: 首先在补码表示法中,负数的补码 = 取反 +1,
阅读全文
摘要:Spring Security提供的功能主要包含两方面:认证和授权。Spring Security支持多种不同的认证方式,但是无论开发者采用哪种认证方式,都不会影响授权功能的使用,Spring Security很好的实现了认证和授权两大功能的解耦,这也是它受欢迎的原因之一 认证就是确认用户身份,也就
阅读全文
摘要:##Spring Security异常体系 Spirng Security中的异常共有两大类:AuthenticationException(认证异常)和AccessDeniedException(权限异常) ###AuthenticationException(认证异常) Authenticati
阅读全文
摘要:跨域是实际应用开发中一个非常常见的需求,在Spring 框架中对于跨域问题的处理方案有好几种,引入了Spring Security之后,跨域问题的处理方案又增加了。 ##CORS CORS就是由W3C制定的一种跨域资源共享技术标准,其目的就是为了解决前端的跨域请求。在JavaEE开发中,最常见的前端
阅读全文
摘要:##HTTP响应头处理 HTTP响应头中的许多属性都可以用来提高Web安全。我们来看一下Spring Security中提供显示支持的一些HTTP响应头 Spring Security默认情况下 显式支持的HTTP相应头主要有以下几种: Cache-Control: no-cache, no-sto
阅读全文
摘要:Spirng Security优势之一就是为各种可能存在的漏洞提供了保护机制,而这些保护机制默认都是开启的。 CSRF(跨站请求伪造) 也可以称为一键式攻击,CSRF攻击时一种挟持用户在当前已登录的浏览器上发送恶意请求的攻击方法,简单来说,就是攻击者通过一些技术手段欺骗用户的浏览器,去访问一个用户曾
阅读全文
摘要:HttpFirewall是Spring Security提供的Http防火墙,它可以用于拒绝潜在的危险请求或者包装这些请求进而控制其行为。通过HttpFirewall可以对各种非法请求提前进行拦截并处理,降低损失。代码层面,HttpFirewall被注入到FilterChainProxy中,并在Sp
阅读全文
摘要:当浏览器登录后,服务器和浏览器之间会建立一个会话(Session), 浏览器在每次发送请求时都会携带一个SessionId,服务端根据这个SessionId判断用户身份。浏览器关闭后Session不会自动销毁。需要开发者手动在服务端调用Session销毁方法,或者等待Session过期自动销毁。 在
阅读全文
摘要:平时我们依赖于Session保存会话信息,一旦浏览器关闭再重新打开,会话信息会丢失,我们需要重新登录。我们可以使用RememberMe功能,及时关闭了浏览器再次打开,登录状态依然有效! RememberMe的原理就是通过Cookie记录用户信息,用户登陆成功后会通过算法将用户信息,时间戳进行加密,存
阅读全文
摘要:在实际开发中, 我们往往需要对密码进行加密存储。 在Spring Security中是通过一种自适应单向函数来处理密码问题,这种自适应单向函数的方式在进行密码匹配时会有意占用大量系统资源(CPU,内存等),这样就可以增加恶意用户攻击系统的难度。当然开发者也可以将用户名/密码的方式换成会话,OAuth
阅读全文
摘要:在使用 SpringSecurity 中,大伙都知道默认的登录数据是通过 key/value 的形式来传递的,默认情况下不支持 JSON格式的登录数据,如果有这种需求,就需要自己来解决,本文主要和小伙伴来聊聊这个话题。 通过之前的分析,我们已经知道了登录参数的提取在 UsernamePassword
阅读全文
摘要:在一个实际项目中。并非所有的请求都需要经过过滤器,有一些特殊的请求,比如说静态资源,就不需要经过过滤器链。 经过之前对过滤器链的分析,我们知道在WebSecurity中维护了一个ignoredRequests变量,记录了所有需要被忽略的请求 @Configuration public class S
阅读全文
摘要:在之前的分析中我们已经知道了Spring Security是由AuthenticationManager(ProviderManager)把认证请求分发给多个认证器。 在Spring Security中存在全局AuthenticationManager与局部AuthenticationManager
阅读全文
摘要:在Spring Security中可以定义多个过滤器链,一个WebSerityConfigurerAdapter的实例就可以配置一个过滤器链,我们只需要配置多个WebSerityConfigurerAdapter的实例即可 可以看到,当请求到达 FilterChainProxy 之后,FilterC
阅读全文
摘要:##HttpSecurity HttpSecurity 也是 Spring Security 中的重要一环。我们平时所做的大部分 Spring Security 配置也都是基于 HttpSecurity 来配置的。因此我们有必要从源码的角度来理解下 HttpSecurity 到底干了啥? 首先我们来
阅读全文
摘要:##(一) AuthenticationProvider实现类 经过之前的认证流程分析,我们知道了认证主要是在AuthenticationProvider中的authenticate中完成的,那么我们只需要在这个方法中添加一个验证码校验即可 //新建一个AuthenticationProvider实
阅读全文
摘要:在我们进行登录时,如果用户数据来自不同的表,在一个表中查不到就去另一个表查,我们就需要配置多个数据源 经过(五)的分析,我们知道了认证需要经过ProviderManager,ProviderManager对应多个AuthenticationProvider,而每个AuthenticationProv
阅读全文
摘要:Spring Security整个流程如上图所示,下面我们分别介绍一下各个组件 ##AbstracAuthenticationProcessingFilter AbstracAuthenticationProcessingFilter是一个抽象类,如果使用账号密码的方式登录,AbstracAuthe
阅读全文
摘要:登录成功后,如果我们没有使用框架的话,用户信息会保存在HttpSession中,Spring Security实质是对HttpSession进行了封装,我们可以直接从HttpSession中获取信息,也可以采用Spring Security提供的方法 (1)从SecurityContextHolde
阅读全文
摘要:@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter{ @Override protected void configure(HttpSecurity http) throws Exceptio
阅读全文
摘要:##快速入门 1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> 2.编写control
阅读全文
摘要:原理 是基于责任链的方式 WebAsyncManagerIntegrationFilter:将 Security 上下文与 Spring Web 中用于处理异步请求映射的 WebAsyncManager 进行集成。 SecurityContextPersistenceFilter:在每次请求处理之前
阅读全文
摘要:###zookeeper(一般不用) 1.springcloud整合zookeeper(注意必须引入springcloud) <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-star
阅读全文
摘要:##Nginx ###基本概念 Nginx是一个高性能的http和反向代理的服务器,占用内存少,并发能力强,主要应用有反向代理,负载均衡,动静分离等等 正向代理:局域网中的用户想要访问外部Internet,可以走代理服务器,这就是正向代理。正向代理客户端需要配置,即我们在浏览器中设置使用代理服务器
阅读全文
摘要:##分布式session ###(1) session 原理 session存储在服务端,jsessionId存在客户端,每次通过jsessionid取出保存的数据 问题:但是正常情况下session不可跨域,它有自己的作用范围 这个session被sessionManager管理着 Jsessio
阅读全文
摘要:1.服务单一职责+独立部署:由于秒杀系统需要承受大量的并发压力,我们应该注意即使秒杀系统挂掉了也不要影响别的系统 2.秒杀链接的加密:如果直接暴露秒杀接口的话,可能出现提前抢购的情况,我们可以到点了再把一个随机码发送给浏览器,浏览器访问时需要带上这个随机码 3.库存预热+快速扣减:我们不能让大量的请
阅读全文
摘要:###cron表达式 语法:秒 分 时 日 月 周 年(spring不支持年) 一般为6位或者7位,以空格分开 字段 允许值 允许的特殊字符 秒(Seconds) 0~59的整数 , - * / 四个字符 分(Minutes) 0~59的整数 , - * / 四个字符 小时(Hours) 0~23的
阅读全文
摘要:我们在写支付系统的时候,大致的流程是这样 关于订单超时的问题,可以看我的另一篇博文,下面来介绍以下项目整合支付宝沙箱支付 ###支付宝沙箱支付 正常使用的情况下是需要向支付宝发申请,支付宝会帮你开通服务,对于我们开发者来说,可以使用支付宝沙箱支付来模拟支付 1、进入支付宝开放平台 支付宝开放平台,找
阅读全文
摘要:RabbitMQ 消息中间件: 1.利用可靠的传输机制在系统和系统间直接进行通信 2.通过提供消息传递和消息的排队机制,可以在分布式系统环境下扩展进程间的通讯 本质就是接受数据,接受请求,存储数据,发送数据等 应用场景: 1.跨系统的数据传递 2.高并发的流量削峰 3.数据的分发和异步处理 4.大数
阅读全文
摘要:最近在做校园二手商城,在支付功能时遇到这样一个问题: 正常支付逻辑: 生成订单 → 锁库存 → 支付 → 删除订单 如果我们在订单生成后没有支付,但是库存被锁了。因此我们需要定时检查如果订单超过30分钟没有支付的话,就自动删除订单并释放库存 那么该如何实现定时检测订单的功能呢? 第一个想法是通过定时
阅读全文
摘要:##七大参数 /** * Creates a new {@code ThreadPoolExecutor} with the given initial * parameters. * * @param corePoolSize the number of threads to keep in th
阅读全文
摘要:缓存一致性是用来解决缓存和数据库的同步问题 ###双写模式 双写模式是指数据修改后,先写到数据库再写到缓存中 问题:在并发情况下,由于卡顿等原因,双写模式可能在缓存中丢失写的先后性,从而出现脏数据(由于数据库中数据没问题,因此在缓存过期后再次查询能得到修正) 解决:1.加锁,只有写入数据库--写入缓
阅读全文
摘要:###Redis分布式锁 我们使用redis 实现分布式锁,因为redis是单线程的,因此我们不必考虑并发安全问题(即使在redis 6.x中 redis变为多线程也只是在读写IO中使用多线程,其执行命令仍然是单线程) 1.加锁 setnx lock volue //返回1代表lock这个键不存在,
阅读全文
摘要:###缓存穿透 在默认情况下,用户请求数据时,会先在缓存(Redis)中查找,若没找到即缓存未命中,再在数据库中进行查找,数量少可能问题不大,可是一旦大量的请求数据(例如秒杀场景)缓存都没有命中的话,就会全部转移到数据库上,造成数据库极大的压力,就有可能导致数据库崩溃。网络安全中也有人恶意使用这种手
阅读全文