403在spring安全中禁用,仅限自定义userdetailsservice

ijnw1ujt  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(333)

此问题已在此处找到答案

springboot安全角色不工作(3个答案)
两天前关门了。
我在SpringBoot项目中为SpringSecurity提供了以下文件。当我使用inmemoryauthentication时,它起作用,但当我使用CustomUserDetails服务时,它不起作用。自定义userdetailsservice类被调用,但仍然给出403(当我尝试访问/user时),但它适用于打开的URL(/usr)。

  1. import org.springframework.security.core.userdetails.User
  2. @Service
  3. public class UserDetailsServiceImpl implements UserDetailsService {
  4. @Override
  5. public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
  6. //not using parameter which is being passed as trying to figure out the problem first.
  7. UserDetails user = User.withUsername("abc").password("abc").authorities("ADMIN").build();
  8. return user;
  9. }
  10. }
  1. @Configuration
  2. @EnableWebSecurity
  3. public class SecurityConfig extends WebSecurityConfigurerAdapter {
  4. @Autowired
  5. UserDetailsServiceImpl userDetailsService;
  6. @Override
  7. protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  8. auth.userDetailsService(userDetailsService).passwordEncoder(getPasswordEncoder());
  9. // auth.inMemoryAuthentication().withUser("abc").password("abc").roles("ADMIN");
  10. }
  11. @Bean
  12. public PasswordEncoder getPasswordEncoder() {
  13. return NoOpPasswordEncoder.getInstance();
  14. }
  15. @Override
  16. protected void configure(HttpSecurity http) throws Exception {
  17. http.authorizeRequests()
  18. .antMatchers("/api/user").hasRole("ADMIN")
  19. .antMatchers("/").permitAll()
  20. .and().formLogin();
  21. }
  22. }
  1. @RestController
  2. @RequestMapping("/api")
  3. public class UserController {
  4. @GetMapping("/usr")
  5. public ResponseEntity<String> getOpenResponse() {
  6. return ResponseEntity.ok("You are accessing open url");
  7. }
  8. @GetMapping("/user")
  9. public ResponseEntity<String> getSecuredResponse() {
  10. return ResponseEntity.ok("You are accessing secured path");
  11. }
  12. }

我做错了什么?我错过什么了吗?

8wigbo56

8wigbo561#

问题在于:

  1. UserDetails user = User.withUsername("abc").password("abc").authorities("ADMIN").build();

您将用户权限设置为 "ADMIN" ,但在 SecurityConfig 类,您希望用户拥有一个角色 "ADMIN" 事实上,这是一个权威的捷径 "ROLE_ADMIN" :

  1. http.authorizeRequests()
  2. .antMatchers("/api/user").hasRole("ADMIN")

要解决此问题,应定义用户角色:

  1. User.withUsername("abc").password("abc").roles("ADMIN")

相关问题