spring auth错误否AuthenticationProvider

时间:2018-11-23 17:37:53

标签: java spring spring-boot spring-security

我正在尝试使用Spring Boot Security构建身份验证系统。 所以我有自定义身份验证提供程序(没有@Component批注)

public class CustomAuthProvider extends DaoAuthenticationProvider {

    @Override
    public Authentication authenticate(Authentication authentication)
            throws AuthenticationException {

        String name = authentication.getName();
        String password = authentication.getCredentials().toString();

        if (authentication.isAuthenticated()) {
            return authentication;
        }

        if ("user".equals(name) && "password".equals(password)) {

            return new UsernamePasswordAuthenticationToken(
                    name, password, new ArrayList<GrantedAuthority>(Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"))));
        } else {
            return null;
        }
    }

    @Override
    public boolean supports(Class<?> authentication) {
        return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication));
    }
}

声明为bean

@Bean
    public DaoAuthenticationProvider authProvider() {
        final CustomAuthProvider authProvider = new CustomAuthProvider();
        authProvider.setUserDetailsService(userDetailsService);
        return authProvider;
    }

这是配置:

@Override
    protected void configure(
            AuthenticationManagerBuilder auth) throws Exception {

        auth.authenticationProvider(authProvider());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/anonymous*").anonymous()
                .antMatchers("/login*").permitAll()
                .antMatchers("/user/registration*").permitAll()
                .anyRequest().authenticated()
                .and().formLogin()
                .loginProcessingUrl("/login");
    }

当我尝试将查询发布到localhost:8080 / login时,我收到带有消息的登录表单

  

没有找到AuthenticationProvider   org.springframework.security.authentication.UsernamePasswordAuthenticationToken

1 个答案:

答案 0 :(得分:1)

spring的身份验证默认请求参数为:usernamepassword 您正在发送email而不是username,因此它会在身份验证管理器中的某处引发异常。

如果要覆盖默认值,只需在HTTP安全配置中指定即可:

.formLogin()
    .loginProcessingUrl("/login") 
    .usernameParameter("email")
    .passwordParameter("password")