用户身份验证从不调用

时间:2018-02-10 06:55:55

标签: spring-mvc spring-boot spring-security

我尝试使用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无法再次运行,即使还原编辑也不会做任何事情。

0 个答案:

没有答案