前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot实现BCrypt密码加密

SpringBoot实现BCrypt密码加密

作者头像
爱撒谎的男孩
发布2019-12-31 15:48:44
5.5K0
发布2019-12-31 15:48:44
举报
文章被收录于专栏:码猿技术专栏码猿技术专栏

文章目录

1. SpringBoot 实现 BCrypt密码加密

1.1. 前言

1.2. API

1.3. 使用

1.4. 源码

SpringBoot 实现 BCrypt密码加密

前言

  • 出于安全的考虑,一些敏感的信息是绝对不能以明文的方式存储在数据库中的,比如密码通常是通过哈希算法进行加密的。有很多标准的算法比如SHAMD5,结合salt(盐)是一种不错的选择,但是如果知道其加密的规则还是相对不安全。
  • Spring security提供了BCryptPasswordEncoder类,使用Bcrypt强哈希方法来加密密码
  • Bcrypt强哈希算法每次加密的结果都是不一样的。

API

  • public String encode(CharSequence rawPassword): 对给定的内容进行加密,返回加密后的字符串
  • public boolean matches(CharSequence rawPassword, String encodedPassword): 比较给定的字符串和加密后的字符串是否是同一个
    • rawPassword:未加密的字符串
    • encodedPassword: 加密后的字符串

使用

  • 引入spring security的依赖
代码语言:javascript
复制
   <dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>
  • 添加security的配置类,如下:
    • 在其中注入BCryptPasswordEncoder
代码语言:javascript
复制
/**
 * Spring security的配置类
 */
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.authorizeRequests()
		.antMatchers("/**")
		.permitAll()
		.anyRequest()
		.authenticated()
		.and().csrf().disable();
		super.configure(http);
	}
	
	/*
	 * 注入BCryptPasswordEncoder
	 */
	@Bean
	public BCryptPasswordEncoder bCryptPasswordEncoder() {
		return new BCryptPasswordEncoder();
	}
	
}
  • 主配置类添加@EnableWebSecurity
代码语言:javascript
复制
@SpringBootApplication
@EnableWebSecurity   //开启security
public class AuthServerApplication {
  • 在业务层实现登录和注册的功能 ,对密码进行加密和校验
代码语言:javascript
复制
@Service
@Transactional
public class UserServiceImpl implements UserService {
	
	@Resource
	private UserRepository userRepository;
	
	@Resource
	private BCryptPasswordEncoder bCryptPasswordEncoder;  //注入bcryct加密

	@Override
	public User add(User user) {
		user.setPassword(bCryptPasswordEncoder.encode(user.getPassword())); //对密码进行加密
		User user2 = userRepository.save(user);
		return user2;
	}

	@Override
	public ResultInfo login(User user) {
		ResultInfo resultInfo=new ResultInfo();
		User user2 = userRepository.findByName(user.getName());  
		if (user2==null) {
			resultInfo.setCode("-1");
			resultInfo.setMessage("用户名不存在");
			return resultInfo;
		}
		
		//判断密码是否正确
		if (!bCryptPasswordEncoder.matches(user.getPassword(),user2.getPassword())) {
			resultInfo.setCode("-1");
			resultInfo.setMessage("密码不正确");
			return resultInfo;
		}
		resultInfo.setMessage("登录成功");
		return resultInfo;
	} 
}

源码

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot 实现 BCrypt密码加密
    • 前言
      • API
        • 使用
          • 源码
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档