密码编码 – BCrypt – 不授权哈希密码,仅授权纯文本

我有一个宠物项目,我一直在慢慢削减,最近我决定为用户加入BCrypt密码编码。

我遇到的问题是它现在从未授权任何用户我已经拥有它,我无法弄清楚原因。

希望你们能帮忙。

以下是我的SecurityConfig.java文件中的配置

@Autowired private PasswordEncoder passwordEncoder; @Override protected void registerAuthentication(AuthenticationManagerBuilder auth) throws Exception { auth.jdbcAuthentication().dataSource(dataSource).passwordEncoder(passwordEncoder); } @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } 

我的控制器注册新用户并将其记录在:

 @RequestMapping(value = "/user_create", method = RequestMethod.POST) public String createUser(@ModelAttribute User user) { user.setPlain(user.getPassword()); user.setPassword(BCrypt.hashpw(user.getPassword(),BCrypt.gensalt())); userInterface.saveUser(user); return "redirect:/"; } 

创建新用户可以完美地工作(将其加载到DB中),结果如下所示:

 ID | USERNAME | PLAIN_PASSWORD | HASHED_PASSWORD 1 | hash | hash | $2a$10$BYpLI.Dd06HS1myhxxeyb.lZ/74lfYVXSk9Tuy.iYTzy4t2Yx5FtW 

我无法授权用户的原因是什么?

更新1

我还添加了另一个用户(通过后端)所以我有2个用户看起来像这样

 ID | USERNAME | PLAIN_PASSWORD | HASHED_PASSWORD 1 | hash | hash | $2a$10$BYpLI.Dd06HS1myhxxeyb.lZ/74lfYVXSk9Tuy.iYTzy4t2Yx5FtW 2 | admin | admin | admin 

通过上面的设置,我可以使用“admin”和“admin”登录,即使它没有哈希,甚至我也有密码编码器。

更新2

数据库由Hibernate管理,设置如下:

 @Entity @Table(name = "user") public class User { @Id @GeneratedValue private Integer id; @NotNull @Column(name = "username") private String login; @NotNull @Column(name = "hashed_password") private String password; @Column(name = "plain_password") private String plain; // GETTERS AND SETTERS // } 

我已经确定了问题….而且它非常简单。

改变了以下内容:

 @Override protected void registerAuthentication(AuthenticationManagerBuilder auth) throws Exception { auth.jdbcAuthentication().dataSource(dataSource).passwordEncoder(passwordEncoder); } 

到下面

 @Override protected void registerAuthentication(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(customUserService).passwordEncoder(passwordEncoder).and jdbcAuthentication().dataSource(dataSource); } 

从HttpSecurity配置中移除它。