首页 > 代码库 > spring security使用哈希加密的密码
spring security使用哈希加密的密码
之前我们都是使用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使用哈希加密的密码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。