专注Java领域技术
我们一直在努力

一文学会 Spring Security 中的密码加密(bCryptPasswordEncoder)

原文始发于:一文学会 Spring Security 中的密码加密(bCryptPasswordEncoder)

BCryptPasswordEncoder 对象主要用于对用户的密码进行加密处理

一、加密演示

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;  public class BCryptPasswordEncoderUtils {     //实例化对象     private static BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();     //进行加密处理     public static String encodePassword(String password) {         return bCryptPasswordEncoder.encode(password);     }      public static void main(String[] args) {         String password = "jack";         //调用加密处理方法         String pwd1 = encodePassword(password);         String pwd2 = encodePassword(password);         System.out.println(pwd1);         System.out.println(pwd2);         System.out.println(pwd1.length());         System.out.println(pwd2.length());     } } 

一文学会 Spring Security 中的密码加密(bCryptPasswordEncoder)
可以看出,加密方式为动态加密,每次的加密结果都不同,但是加密后的字符长度是固定的 60

二、实例演示用户密码加密

(1)由于加密后的字符长度为60,所以要确保数据库设置用户密码的长度至少为60
一文学会 Spring Security 中的密码加密(bCryptPasswordEncoder)
(2)spring-security 中配置加密类,并开启加密方式

 <!-- 切换成数据库中的用户名和密码 -->     <security:authentication-manager>         <security:authentication-provider user-service-ref="userService">             <!-- 配置加密的方式 -->             <security:password-encoder ref="passwordEncoder"/>         </security:authentication-provider>     </security:authentication-manager>      <!-- 配置加密类 -->     <bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/> 

(3)对应的 UserServiceImpl 中调用dao 的用户保存操作时
一文学会 Spring Security 中的密码加密(bCryptPasswordEncoder)
保存成功:
一文学会 Spring Security 中的密码加密(bCryptPasswordEncoder)
(4)UserServiceImpl 封装User对象时:登录时会自动验证
一文学会 Spring Security 中的密码加密(bCryptPasswordEncoder)
这里就不用再密码前加"{noop}",这里密码已经进行了加密处理,而且通过spring-security.xml 中的配置可以自动进行了解密处理

三、使用配置文件 SecurityConfig

当对密码进行加密处理,存到数据库中后,用户登录时会自动对密码进行解密,可以通过注入 passwordEncoder 方法实现

@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter {     @Autowired     UserService userService;      @Override     protected void configure(AuthenticationManagerBuilder auth) throws Exception {         auth.userDetailsService(userService);     }     @Bean     PasswordEncoder passwordEncoder() {         return new BCryptPasswordEncoder();     }     @Bean     RoleHierarchy roleHierarchy() {         RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();         String hierarchy = "ROLE_dba > ROLE_admin n ROLE_admin > ROLE_user";         roleHierarchy.setHierarchy(hierarchy);         return roleHierarchy;     }     @Override     protected void configure(HttpSecurity http) throws Exception {         http.authorizeRequests()                 .antMatchers("/dba/**").hasRole("dba")                 .antMatchers("/admin/**").hasRole("admin")                 .antMatchers("/user/**").hasRole("user")                 .anyRequest().authenticated()                 .and()                 .formLogin()                 .permitAll()                 .and()                 .csrf().disable();     } } 

赞(0) 打赏
未经允许不得转载:Java小咖秀 » 一文学会 Spring Security 中的密码加密(bCryptPasswordEncoder)
免责声明

抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专注Java技术 100年

联系我们联系我们

你默默的关注就是最好的打赏~

支付宝扫一扫打赏

微信扫一扫打赏