无法找到“org.springframework.security.core.用户详细信息.用户详细信息服务”

cxfofazt  于 2023-03-16  发布在  Spring
关注(0)|答案(1)|浏览(342)

我正在使用Spring Security基本身份验证,应用程序启动时出现以下错误:
com.spring.security.firstapp.security.MySecurityConfig中的方法authManager的参数2需要类型为“org. spring framework.security.core.userdetails.UserDetailsService”的Bean,但找不到该Bean。
行动:
考虑在配置中定义一个类型为“org.springframework.security.core.userdetails.UserDetailsService”的bean。
MySecurityConfig.java
@Configuration 公共类MySecurityConfig {

@Autowired
private MyAuthenticationProvider authenticationProvider;

@Bean
public AuthenticationManager authManager(HttpSecurity http, BCryptPasswordEncoder passwordEncoder,
        UserDetailsService userDetailService) throws Exception {
    return http.getSharedObject(AuthenticationManagerBuilder.class)
            .authenticationProvider(authenticationProvider)
            .build();
}

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http.httpBasic();
    http.authorizeHttpRequests().anyRequest().authenticated();
    return http.build();

}


@Bean
public static BCryptPasswordEncoder bcryptPasswordEncoder() {
    return new BCryptPasswordEncoder();
}

}
MyAuthenticationProvider.java
@Component 公共类MyAuthenticationProvider实现了AuthenticationProvider {

@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
    String userName = authentication.getName();
    String passWord = authentication.getCredentials().toString();
    
    if("tom".equals(userName) && "abc".equals(passWord))
        return new UsernamePasswordAuthenticationToken(userName, passWord);
    else
        throw new BadCredentialsException("Invalid credentials!!");
    
}

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

}

控制器

@RestController公共类HelloController {

@GetMapping("/hello")
public String hello() {
    return "Spring Boot Security";
}

}

pom.xml文件

4.0.0 org.springframework.引导启动程序3.0.4 com.第一个应用程序spring-security 0.0.1-快照spring-security<java.version>17</java.version>org.springframework.引导启动程序spring-boot-starter-security org.springframework.引导启动程序spring-boot-starter-web

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
ruarlubt

ruarlubt1#

我在类MySecurityConfig上添加了Bean

@Bean
public InMemoryUserDetailsManager userDetailsService(PasswordEncoder passwordEncoder) {
    UserDetails user = User.withUsername("user")
        .password(passwordEncoder.encode("password"))
        .roles("USER")
        .build();

    UserDetails admin = User.withUsername("admin")
        .password(passwordEncoder.encode("admin"))
        .roles("USER", "ADMIN")
        .build();

    return new InMemoryUserDetailsManager(user, admin);
}

之后它运行良好。

相关问题