// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package org.springframework.security.crypto.bcrypt; import java.security.SecureRandom; import java.util.regex.Pattern; import org.apache.commons.…
浅谈使用springsecurity中的BCryptPasswordEncoder方法对密码进行加密(encode)与密码匹配(matches) spring security中的BCryptPasswordEncoder方法采用SHA-256 +随机盐+密钥对密码进行加密.SHA系列是Hash算法,不是加密算法,使用加密算法意味着可以解密(这个与编码/解码一样),但是采用Hash处理,其过程是不可逆的. (1)加密(encode):注册用户时,使用SHA-256+随机盐+密钥把用户输入的密码进…
最近在写用户管理相关的微服务,其中比较重要的问题是如何保存用户的密码,加盐哈希是一种常见的做法.知乎上有个问题大家可以先读一下: 加盐密码保存的最通用方法是? 对于每个用户的密码,都应该使用独一无二的盐值,每当新用户注册或者修改密码时,都应该使用新的盐值进行加密,并且这个盐值应该足够长,使得有足够的盐值以供加密.随着彩虹表的出现及不断增大,MD5算法不建议再使用了. 存储密码的步骤 使用基于加密的伪随机数生成器(Cryptographically Secure Pseudo-Random Num…
Spring Security 中使用 JWT 1.无状态登录 1.1 什么是有状态? 1.2 什么是无状态 1.3 如何实现无状态 2.JWT 2.1 JWT数据格式 2.2 JWT交互流程 2.3 JWT 存在的问题 3.实践 3.1 环境搭建 3.2 JWT 过滤器配置 3.3 Spring Security 配置 3.4 测试 在前后端分离的项目中,登录策略也有不少,不过 JWT 算是目前比较流行的一种解决方案了,本文就和大家来分享一下如何将 Spring Security 和 JWT…
ACL即访问控制列表(Access Controller List),它是用来做细粒度权限控制所用的一种权限模型.对ACL最简单的描述就是两个业务员,每个人只能查看操作自己签的合同,而不能看到对方的合同信息. 下面我们会介绍Spring Security中是如何实现ACL的. 23.1. 准备数据库和aclService ACL所需的四张表,表结构见附录:附录 E, 数据库表结构. 然后我们需要配置aclService,它负责与数据库进行交互. 23.1.1. 为acl配置cache 默认使用e…
Spring Security中html页面设置hasRole无效的问题 一.前言 学了几天的spring Security,偶然发现的hasRole和hasAnyAuthority的区别.当然,可能有更深入的我没看到.现在把我实际的调试结果分享给大家 二.失效原因及解决 下面是部分示例html页面代码   <div sec:authorize="hasRole('R_ADMIN')">   <p class="bg-info">权限0001…
本文基于 spring-security-core-5.1.1 和 tomcat-embed-core-9.0.12. Spring Security 的本质是一个过滤器链(filter chain),当一个请求(request)访问 Web 应用提供的资源时,首先要经过一系列过滤器(filter)的处理,根据过滤器处理的结果返回不同的信息,包括: 返回用户请求的资源 请求未认证,需要认证 包括请求未认证和之前的认证已过期,一般会重定向到一个登录页面让用户认证. 已认证请求没有权限访问资源 Sp…
在网上看见不少的博客.技术文章,发现大家对于Spring Security中的角色(roles)存在较大的误解,最大的误解就是没有搞清楚其中角色和权限的差别(好多人在学习Spring Security时,是不是对于到底加不加“ROLE_”前缀有点犯蒙),有时候觉得在进行权限控制时用权限名称或者用角色名称都差不多(大家这种感觉是对的,如果简单应用确实差不太多).        我们在进行角色权限控制设计时,一般包括账户(users).角色(roles).权限(authorities)这三部分.  …
Spring Security 中的角色继承问题 以前的写法 现在的写法 源码分析 SpringSecurity 在角色继承上有两种不同的写法,在 Spring Boot2.0.8(对应 Spring Security 也是 5.0.11)上面是一种写法,从 Spring Boot2.1.0(对应 Spring Security5.1.1)又是另外一种写法. 以前的写法 这里说的以前写法,就是指 SpringBoot2.0.8(含)之前的写法,在之前的写法中,角色继承只需要开发者提供一个 Rol…
微信公众号提供了微信支付.微信优惠券.微信H5红包.微信红包封面等等促销工具来帮助我们的应用拉新保活.但是这些福利要想正确地发放到用户的手里就必须拿到用户特定的(微信应用)微信标识openid甚至是用户的微信用户信息.如果用户在微信客户端中访问我们第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑.今天就结合Spring Security来实现一下微信公众号网页授权. 环境准备 在开始之前我们需要准备好微信网页开发的环境. 微信公众号服务号 请注意,一定是微信公众号…