之前我们都是使用MD5 Md5PasswordEncoder 或者SHA ShaPasswordEncoder 的哈希算法进行密码加密,在spring security中依然使用只要指定使用自定义加密算法就行,现在推荐spring使用的BCrypt BCryptPasswordEncoder,一种基于随机生成salt的根据强大的哈希加密算法。
首先我们使用spring提供的加密方法对密码 123456 进行加密:
1、使用MD5加密:
package com.petter.util;
import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
/**
* @author hongxf
* @since 2017-04-11 10:52
*/
public class MD5EncoderGenerator {
public static void main(String[] args) {
Md5PasswordEncoder encoder = new Md5PasswordEncoder();
System.out.println(encoder.encodePassword("123456", "hongxf"));
}
}
修改数据库中的用户hxf密码为 7cbdf569746dd62484eb25a55b7df2dc
2、使用BCrypt加密:
package com.petter.util;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
* @author hongxf
* @since 2017-04-10 10:01
*/
public class PasswordEncoderGenerator {
public static void main(String[] args) {
String password = "123456";
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashedPassword = passwordEncoder.encode(password);
System.out.println(hashedPassword);
}
}
修改数据库中的用户hxf密码为 $2a$10$f0DEGrkIpYyzcFrf/fTMSOAKl1Y/XHpKaijWdfiWnOOzGTEs8diLi
这里需要注意,保证数据库密码字段的长度为60或者大于60,否则字符串会被截断。
 
一、使用MD5加密算法:
spring security已经废弃了org.springframework.security.authentication.encoding.PasswordEncoder接口,推荐使用org.springframework.security.crypto.password.PasswordEncoder接口
这里需要自定义。
1、建立自定义密码加密实现类CustomPasswordEncoder
package com.petter.config;
import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
/**
* @author hongxf
* @since 2017-04-11 10:39
*/
public class CustomPasswordEncoder implements PasswordEncoder {
@Override
public String encode(CharSequence rawPassword) {
Md5PasswordEncoder encoder = new Md5PasswordEncoder();
return encoder.encodePassword(rawPassword.toString(), "hongxf");
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
Md5PasswordEncoder encoder = new Md5PasswordEncoder();
return encoder.isPasswordValid(encodedPassword, rawPassword.toString(), "hongxf");
}
}
2、在SecurityConfig中进行配置
@Bean
public PasswordEncoder passwordEncoder(){
return new CustomPasswordEncoder();
//return new BCryptPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
authenticationProvider.setPasswordEncoder(passwordEncoder());
auth.authenticationProvider(authenticationProvider);
}
直接把自定义的类设置即可。
同样适用于SHA加密。
二、使用BCrypt加密算法:
1、只需要在SecurityConfig中进行配置
@Bean
public PasswordEncoder passwordEncoder(){
//return new CustomPasswordEncoder();
return new BCryptPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
authenticationProvider.setPasswordEncoder(passwordEncoder());
auth.authenticationProvider(authenticationProvider);
}
 
PS:如果使用的是jdbcAuthentication,安装如下配置即可
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource).passwordEncoder(passwordEncoder())
.usersByUsernameQuery("select username,password, enabled from users where username = ?")
.authoritiesByUsernameQuery("select username, role from user_roles where username = ?");
}
启动测试即可
 
 
 

spring security使用哈希加密的密码的更多相关文章

  1. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_09-SpringSecurityOauth2研究-Oauth2密码模式授权

    密码模式(Resource Owner Password Credentials)与授权码模式的区别是申请令牌不再使用授权码,而是直接 通过用户名和密码即可申请令牌. 测试如下: Post请求:htt ...

  2. 关于 spring security 对用户名和密码的校验过程

    1.执行 AuthenticationManager 认证方法 authenticate(UsernamePasswordAuthenticationToken) 2.ProviderManager ...

  3. springboot+spring security +oauth2.0 demo搭建(password模式)(认证授权端与资源服务端分离的形式)

    项目security_simple(认证授权项目) 1.新建springboot项目 这儿选择springboot版本我选择的是2.0.6 点击finish后完成项目的创建 2.引入maven依赖  ...

  4. Spring Security 介绍与Demo

    一.Spring Security 介绍 Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块的默认技术选型.我们仅需引入spring-boot-s ...

  5. Spring Security 自定义登录认证(二)

    一.前言 本篇文章将讲述Spring Security自定义登录认证校验用户名.密码,自定义密码加密方式,以及在前后端分离的情况下认证失败或成功处理返回json格式数据 温馨小提示:Spring Se ...

  6. 用Spring Security, JWT, Vue实现一个前后端分离无状态认证Demo

    简介 完整代码 https://github.com/PuZhiweizuishuai/SpringSecurity-JWT-Vue-Deom 运行展示 后端 主要展示 Spring Security ...

  7. SpringBoot集成Spring Security(4)——自定义表单登录

    通过前面三篇文章,你应该大致了解了 Spring Security 的流程.你应该发现了,真正的 login 请求是由 Spring Security 帮我们处理的,那么我们如何实现自定义表单登录呢, ...

  8. Spring Boot整合Spring Security自定义登录实战

    本文主要介绍在Spring Boot中整合Spring Security,对于Spring Boot配置及使用不做过多介绍,还不了解的同学可以先学习下Spring Boot. 本demo所用Sprin ...

  9. Spring Security Web应用入门环境搭建

    在使用Spring Security配置Web应用之前,首先要准备一个基于Maven的Spring框架创建的Web应用(Spring MVC不是必须的),本文的内容都是基于这个前提下的. pom.xm ...

随机推荐

  1. Linux下搜索文件find、which、whereis、locate

    Linux下搜索文件find.which.whereis.locate: - which 寻找“执行文件” - -a 将所有可找到的命令均列出,而不仅仅列出第一个找到的命令名称 - whereis 寻 ...

  2. 10招步骤保护IIS服务器安全

    问题 IIS(Internet Information Server)是黑客特别喜欢的目标.因此,对于管理IIS网页服务器的管理员来说,确保服务器安全是一件至关重要的事.IIS 4.0和IIS 5.0 ...

  3. [多媒体] m3u8简介

    m3u8简介 简介:https://www.jianshu.com/p/426425cad08a RFC:https://tools.ietf.org/html/rfc8216 原理:将视频或音频流分 ...

  4. jupyter 修改工作路径

    在所需打开的目录中新建一个runJupyter.bat文件 将内容修改为: cd ......jupyter notebook 注1:上述两行中,第一行的......为路径(可以不添加,可空着不填), ...

  5. 【BZOJ4027】[HEOI2015]兔子与樱花 贪心

    [BZOJ4027][HEOI2015]兔子与樱花 Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组 ...

  6. 下载安装配置与使用MySQL-5.7.12-winx64.zip

    第一步:下载安装包 下载 地址:http://www.mysql.com/ 第二步:解压下载包 下载好后解压文件,把内容解压到想要的位置,本例解压到“D:\Program Files\mysql-5. ...

  7. 活动窗口(Active),焦点窗口(Focus)和前景窗口(Foreground)之间的关系

    活动窗口(Active),焦点窗口(Focus)和前景窗口(Foreground)之间的关系 任何一个时候,我们的Windows桌面上总有一个最前台的窗口,其实说简单的,就是标题栏变成深蓝色的那个窗口 ...

  8. winsxs清理

    win7的网友经常问:C:Windowswinsxs文件夹下是什么文件,可以删除吗? 答案是不建议你删除的,如果你特别想删除的话我推荐你一个工具. 本人亲测系统正常运行. 可以为C盘剩下将近4G空间 ...

  9. 微软MVP Round Table

    2017年7月7日,微软VS圈子的老大兼女神Julia(潘正磊)以及Peter Hu等人,和若干MVP一起在进行了一次Round Table讨论. 讨论过程中主要针对VS和TFS/VSTS相关的功能. ...

  10. java倒序输出List

    先贴代码 package com.tsubasa.collection; import java.util.ArrayList; import java.util.Arrays; import jav ...