spring boot 的安全配置

security configuration with spting boot

我是 Spring 的新人 有人可以向我解释这两种方法(loadUserByUsername 和 configure)的作用吗? 我正在尝试了解 spring 安全性

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(myAuthenticationProvider);
    }
@Override
    public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
        UserBuilder builder = null;
        User user = userRepository.findByEmail(email);
        if (user==null) {
            throw new UsernameNotFoundException(email);
        }else{
            builder = org.springframework.security.core.userdetails.User.withUsername(email);
            builder.password(user.getPassword());
            builder.roles(user.getRole());
        }
        return builder==null ? null : builder.build();
    }

}

UserDetailsService bean 被 DaoAuthenticationProvider 用来检索用户信息以便对他们进行身份验证。它是 Spring Security.

中的一个核心接口

configure(AuthenticationManagerBuilder auth) 方法可用于将生成的 AuthenticationManager 作为 bean 公开。你可以这样做:

@Override
protected void configure(AuthenticationManagerBuilder auth) {
        auth
        // enable in memory based authentication with a user named
        // "user" and "admin"
        .inMemoryAuthentication().withUser("user").password("password").roles("USER").and()
                .withUser("admin").password("password").roles("USER", "ADMIN");
}

不过,您可以通过以下方式实现与上述相同的效果:

@Bean
UserDetailsService userDetailsService() {
    UserDetails user = User.withDefaultPasswordEncoder().username("test").password("password")
        .roles("ROLE_USER").build();
    return new InMemoryUserDetailsManager(user);
}

请注意 WebSecurityConfigurerAdapter class has been deprecated 在 Spring Security 5.7.0-M2 中,因此不再推荐使用。博客 post 提供了更多详细信息。