使用springsecurity对密码进行加密处理

  • Post author:
  • Post category:其他


点击上方

Java

老铁,并选择 设为星标

优质文章和资料会及时送达

任何应用考虑到安全,绝不能明文的方式保存密码。密码应该通过哈希算法进行加密。

有很多标准的算法比如SHA或者MD5,结合salt(盐)是一个不错的选择。Spring Security

提供了BCryptPasswordEncoder类,实现Spring的PasswordEncoder接口使用BCrypt强

哈希方法来加密密码。BCrypt强哈希方法 每次加密的结果都不一样。

引入Maven依赖
    <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-security</artifactId>
      </dependency>
添加配置类

我们在添加了spring security依赖后,所有的地址都被spring security所控制了,我们目

前只是需要用到BCrypt密码加密的部分,所以我们要添加一个配置类,配置为所有地址

都可以匿名访问。

/**
 * 安全配置类
 */
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/**").permitAll()
                .anyRequest().authenticated()
                .and().csrf().disable();
    }
}
将BCryptPasswordEncoder添加到Spring容器中
@Bean
public BCryptPasswordEncoder bcryptPasswordEncoder(){
    return new BCryptPasswordEncoder();
}
给密码加密
@Autowired
    private BCryptPasswordEncoder encoder;、
public void add(Admin admin) {
        admin.setId( idWorker.nextId()+"" );
        //加密
        String newPassword = encoder.encode(admin.getPassword());
        admin.setPassword(newPassword);
        adminDao.save(admin);
    }
登录时密码校验
public Admin findByLoginnameAndPassword(String loginname,String password){
        Admin admin = adminDao.findByLoginname(loginname);
        //验证密码是否匹配
        if (admin != null && encoder.matches(password,admin.getPassword())){
            return admin;
        }else{
            return null;
        }
    }



版权声明:本文为mytimelife原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。