我尝试使用BCrypt从MySQL数据库验证用户
scope :by_name, -> { joins(:users).where("users.name like '%?%'",'FirstName' ) }
这些请求
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().usersByUsernameQuery(USER_LOGIN_QUERY).authoritiesByUsernameQuery(GET_USER_ROLE_QUERY)
.dataSource(dataSource).passwordEncoder(bCryptPasswordEncoder);
}
登录页面
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/login").permitAll()
.antMatchers("/reg").permitAll().anyRequest().hasAuthority("ADMIN").anyRequest()
.authenticated().and().csrf().disable().formLogin().loginPage("/login").failureUrl("/login?error=true")
.defaultSuccessUrl("/").usernameParameter("username").passwordParameter("password").and()
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/").and()
.exceptionHandling().accessDeniedPage("/403");
}
两者都被覆盖'配置'方法在Web启动时调用。正如我所做的那样,syserr从两者中打印出随机线到控制台。
我在application.properties中设置数据源并确认它是正确的,因为我可以成功注册新用户。它是自动装配的
USER_LOGIN_QUERY和GET_USER_ROLE_QUERY也是正常的,它适用于MySQL查询。
bCryptPasswordEncoder工作,因为注册新用户会将密码编码为散列字符串。它是自动装配的
使用jpa.show-sql = true,注册用户(保存到数据库)和其他查询会在控制台中显示SQL。但是,身份验证DON&T; T的两个查询显示在控制台日志中。所以我假设使用post方法登录永远不会调用身份验证,因此,数据源,查询和passwordEncoder不相关
因此,登录始终将我重定向到failureUrl。
我哪里做错了?如何正确进行身份验证?
PS:另一方面,我按照这里的教程https://github.com/gustavoponce7/SpringSecurityLoginTutorial,构建并运行本教程源代码,没有上述问题。
UPDATE :我尝试了新的Spring Boot项目,重复了这个过程,制作了一个简单的带安全性的Spring Web。
jdbcAuthentication有时会进行身份验证,但会给我SQL查询错误。在纠正查询错误后,BOOMM无法再次运行,即使还原编辑也不会做任何事情。