【发布时间】:2021-10-01 03:11:10
【问题描述】:
我在 Spring Security 的 Spring Boot 项目中有以下文件。当我使用 inMemoryAuthentication 时它可以工作,但是当我使用自定义 UserDetailsService 时它不起作用。自定义 UserDetailsService 类被调用,但它仍然给出 403(当我尝试访问 /user 时),但它适用于打开的 url (/usr)。
import org.springframework.security.core.userdetails.User
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//not using parameter which is being passed as trying to figure out the problem first.
UserDetails user = User.withUsername("abc").password("abc").authorities("ADMIN").build();
return user;
}
}
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsServiceImpl userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(getPasswordEncoder());
// auth.inMemoryAuthentication().withUser("abc").password("abc").roles("ADMIN");
}
@Bean
public PasswordEncoder getPasswordEncoder() {
return NoOpPasswordEncoder.getInstance();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/api/user").hasRole("ADMIN")
.antMatchers("/").permitAll()
.and().formLogin();
}
}
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/usr")
public ResponseEntity<String> getOpenResponse() {
return ResponseEntity.ok("You are accessing open url");
}
@GetMapping("/user")
public ResponseEntity<String> getSecuredResponse() {
return ResponseEntity.ok("You are accessing secured path");
}
}
我在这里做错了什么?我错过了什么吗?
【问题讨论】:
标签: java spring spring-boot spring-security microservices