控制台报错: Encoded password does not look like BCrypt 意思是前端传回去的密码格式与数据库里的密码格式不匹配,这样即使密码正确也无法校验.自然也就无法登录. 造成这种情况的原因主要有以下几点: 1.登录时,service中的加密类与数据库中密码所采用的加密类不同. service中的加密 数据库中的加密 2.也有可能是其中一个加密了,一个没加密 当密码取值前这样写:代表着从数据库取值时,不采取加密方式 当service中的新增方法不写加密时,也会导致此…
账户密码存储的安全性是一个很老的话题,但还是会频频发生,一般的做法是 SHA256(userInputpwd+globalsalt+usersalt) 并设置密码时时要求长度与大小写组合,一般这样设计可以满足绝大部分的安全性需求.更复杂一些的方案有组合算法签名(比如:SHA256 + BCRYPT 组合 ) , 两步认证,Password Hash 等. 在之前集成  spring-security-oauth2 搭建 OAuth2.0 服务,依赖项 Spring Security 5 默认引入…
在使用Spring Security的过程中,我们会发现框架内部按照错误及问题出现的场景,划分出了许许多多的异常,但是在业务调用时一般都会向外抛一个统一的异常出来,为什么要这样做呢,以及对于抛出来的异常,我们又该如何分场景进行差异化的处理呢,今天来跟我一起看看吧. 一个登陆场景下的外层代码 @PostMapping("/login") public void login(@NotBlank String username, @NotBlank String password, Http…
前言 最近LZ给项目框架升级, 从Spring1.x升级到Spring2.x, 在这里就不多赘述两个版本之间的区别以及升级的原因. 关于升级过程中踩的坑,在其他博文中会做比较详细的记录,以便给读者参考,不要掉进同样的坑里. 这里我们讨论一个关于URL中包含双斜杠被拦截的问题. 发现问题 升级框架之后,测试一个功能时,发现报错Http 500, 第一时间怀疑是后台功能报错.打印后台错误日志,发现报错信息:The request was rejected because the URL was no…
查了下发现是spring security 版本在5.0后就要加个PasswordEncoder了 解决办法 在securityConfig类下加入NoOpPasswordEncoder,不过官方已经不推荐了 @Bean public static NoOpPasswordEncoder passwordEncoder() { return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance(); } 在securityConfig类下加入…
在使用SpringMVC绑定基本类型(如String,Integer等)参数时,应通过@RequestParam注解指定具体的参数名称,否则,当源代码在非debug模式下编译后,运行时会引发HandlerMethodInvocationException异常,这是因为只有在debug模式下编译,其参数名称才存储在编译好的代码中. 譬如下面的代码会引发异常: @RequestMapping(value = "/security/login", method = RequestMethod…
@RequestMapping(value = "/security/login", method = RequestMethod.POST) public ModelAndView login(@RequestParam String userName, @RequestParam String password, HttpServletRequest request) { ...................... 如果使用Eclipse编译不会在运行时出现异常,这是因为Ecli…
报错信息 <MethodNotAllowed> <error>method_not_allowed</error> <error_description>Request method 'GET' not supported</error_description> </MethodNotAllowed> 39是单引号 原因 默认只支持post 解决方法 下载安装postman工具(或其他post工具) 使用post调用 代码增加get的…
一.Spring Security 1.什么是 Spring Security? (1)基本认识 Spring Security 是基于 Spring 框架,用于解决 Web 应用安全性的 一种方案,是一款优秀的权限管理框架. Web 应用的安全一般关注 用户认证(authentication) 以及 用户授权(authorization) 这两个部分.简单的理解就是 Web 应用 如何确定 你是谁 以及 你能干什么. [官网地址:] https://spring.io/projects/spr…
Spring Security 上 Security-dome 1.创建项目 创建一个Spring Boot项目,不用加入什么依赖 2.导入依赖 <dependencies> <!--启动器变为 web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> &…
官方文档参考,5.1.2 中文参考文档,4.1 中文参考文档,4.1 官方文档中文翻译与源码解读 SpringSecurity 核心功能: 认证(你是谁) 授权(你能干什么) 攻击防护(防止伪造身份) 简单的开始 pom 依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q…
简介 完整代码 https://github.com/PuZhiweizuishuai/SpringSecurity-JWT-Vue-Deom 运行展示 后端 主要展示 Spring Security 与 JWT 结合使用构建后端 API 接口. 主要功能包括登陆(如何在 Spring Security 中添加验证码登陆),查找,创建,删除并对用户权限进行区分等等. ps:由于只是 Demo,所以没有调用数据库,以上所说增删改查均在 HashMap 中完成. 前端 展示如何使用 Vue 构建前端…
Spring Security 的注册登录流程 数据库字段设计 主要数据库字段要有: 用户的 ID 用户名称 联系电话 登录密码(非明文) UserDTO对象 需要一个数据传输对象来将所有注册信息发送到我们的 Spring Boot 后端,该DTO对象应该要拥有所有我们以后创建User对象的所有字段内容: public class UserDto {     private String userName;         private String password;​     privat…
目录 BCryptPasswordEncoder加密和对密码验证的原理 一.加密算法和hash算法的区别 二.源码解析 1. encode方法 2. BCrypt.hashpw方法 3. matches方法 三.总结 BCryptPasswordEncoder加密和对密码验证的原理 上一篇:spring security进阶2 添加账户并对账户密码进行加密 spring security中提供了一个加密类BCryptPasswordEncoder,可以用来对密码字符串进行加密,得到加密后的字符串…
最近在写用户管理相关的微服务,其中比较重要的问题是如何保存用户的密码,加盐哈希是一种常见的做法.知乎上有个问题大家可以先读一下: 加盐密码保存的最通用方法是? 对于每个用户的密码,都应该使用独一无二的盐值,每当新用户注册或者修改密码时,都应该使用新的盐值进行加密,并且这个盐值应该足够长,使得有足够的盐值以供加密.随着彩虹表的出现及不断增大,MD5算法不建议再使用了. 存储密码的步骤 使用基于加密的伪随机数生成器(Cryptographically Secure Pseudo-Random Num…
spring security使用目的:验证,授权,攻击防护. 原理:创建大量的filter和interceptor来进行请求的验证和拦截,以此来达到安全的效果. Spring Security主要包括两大功能:验证和鉴权.验证就是确认用户的身份,一般采用用户名和密码的形式:鉴权就是确认用户拥有的身份(角色.权限)能否访问受保护的资源. 鉴权则是一系列判断用户是否有权限访问资源的过程. 1.当用户未登录时,访问任何需要权限的资源都会转向登录页面,尝试进行登录: 2.当用户登录成功时,他会获得一系…
目录 spring security 新建一个springboot项目 添加spring security 登录 使用默认用户和随机生成的密码登录 使用yaml文件定义的用户名.密码登录 使用代码中指定的用户名.密码登录 使用数据库的用户名.密码登录 添加依赖 添加数据库配置 配置spring-security认证和授权 配置自定义UserDetailsService来进行验证 配置JPA中的UserRepository 添加数据库数据 获取登录信息 Spring Security 核心组件 S…
// // 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.…
付出就要得到回报,这种想法是错的. 前言 在使用Spring Security Oauth2登录和鉴权失败时,默认返回的异常信息如下 { "error": "unauthorized", "error_description": "Full authentication is required to access this resource" } .它与我们自定义返回信息不一致,并且描述信息较少.那么如何自定义Spring S…
一.HttpBasic模式的应用场景 HttpBasic登录验证模式是Spring Security实现登录验证最简单的一种方式,也可以说是最简陋的一种方式.它的目的并不是保障登录验证的绝对安全,而是提供一种"防君子不防小人"的登录验证. 就好像是我小时候写日记,都买一个带小锁头的日记本,实际上这个小锁头有什么用呢?如果真正想看的人用一根钉子都能撬开.它的作用就是:某天你的父母想偷看你的日记,拿出来一看还带把锁,那就算了吧,怪麻烦的. 举一个我使用HttpBasic模式的进行登录验证的…
上一篇我们简单的分析了一下认证流程,通过程序的启动加载了各类的配置信息.接下来我们一起来看一下授权流程,争取完成和前面简单的web基于sessin的认证方式一致.由于在授权过程中,我们预先会给用于设置角色,关于如果加载配置的角色信息这里就不做介绍了,上一篇的加载过程中我们可以发现相关的信息. 本篇依旧基于spring-security-basic 配置角色信息 配置用户及其角色信息的方式很多,我们这次依旧采取配置文件的方式,不用代码或其他的配置方式,在之前的配置用户信息的地方applicatio…
在前面的篇幅中,我们对认证和授权流程大致梳理了一遍.在这个过程中我们一直都是使用系统生成的默认页面,登录成功后也是直接调转到根路径页面.而在实际的开发过程中,我们是需要自定义登录页面的,有时还会添加各类验证机制,在登录成功后会跳转至指定页面,还会进行各种美化,甚至是前后端分离的方式.这时,就需要我们对自定义登录进行实现. 本章节使用spring-security-custom-login 一.工程准备 1.pom.xml <?xml version="1.0" encoding=…
@ 目录 1. Spring Security 2. 实验环境准备 3. 日志级别修改 4. 配置用户名/密码 5. 数据库方式校验 6. 不拦截静态资源 7. 自定义登录页面 8. Remember me 1. Spring Security Spring Security 是 Spring 家族中的一个安全管理框架,应用程序的两个主要区域是"认证"和"授权"(或者访问控制).Spring Security是针对Spring项目的安全框架,也是Spring Boo…
1 导入Spring Security的相关依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupI…
编写好继承了WebSecurityConfigurerAdapter类的WebSecurityConfig类后,我们需要在configure(AuthenticationManagerBuilder auth) 方法中定义认证用于信息获取来源以及密码校验规则等.(configure函数名字不重要,官方用的好像是configureGlobal(……),重要的是在这个被@EnableWebSecurity或@EnableGlobalMethodSecurity,或者@EnableGlobalAuth…
Spring Security’s PasswordEncoder interface is used to support the use of passwords which are encoded in some way in persistent storage. You should never store passwords in plain text. Always use a one-way password hashing algorithm such as bcrypt wh…
项目security_simple(认证授权项目) 1.新建springboot项目 这儿选择springboot版本我选择的是2.0.6 点击finish后完成项目的创建 2.引入maven依赖  下面是我引入的依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="…
原贴地址: https://segmentfault.com/a/1190000012260914#articleHeader6 序 前面的一篇文章讲了spring security oauth2的client credentials授权模式,一般用于跟用户无关的,开放平台api认证相关的授权场景.本文主要讲一下跟用户相关的授权模式之一password模式. 回顾四种模式 OAuth 2.0定义了四种授权方式. 授权码模式(authorization code) 简化模式(implicit) 密…
最近在开发一个项目 前后台分离的 使用 spring boot + spring security + jwt 实现用户登录权限控制等操作.但是 在用户登录的时候,怎么处理spring  security  抛出的异常呢?使用了@RestControllerAdvice 和@ExceptionHandler 不能处理Spring Security抛出的异常,如 UsernameNotFoundException等,我想要友好的给前端返回提示信息  如,用户名不存在之类的. 贴上我的代码: JWT…
出现问题的项目算是一个新项目,但基本的脚手架代码是从另一个项目里迁过来的,原项目并没有报错,只有新项目才报异常.看报错内容,判断发生冲突的主要是spring-boot-starter-security和springfox-swagger2这两个jar包的文件. 新项目错误如下: Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabl…