Spring Security基于角色的授权不起作用

eni9jsuy  于 2024-01-05  发布在  Spring
关注(0)|答案(1)|浏览(173)

我在一个演示Sping Boot 项目中实现了Spring Security,我已经为URL实现了以下Spring Security授权。但是,我无法使用MANAGERADMIN角色访问GET APIs。此外,当我尝试使用ADMIN角色访问DELETE API时,我得到了403 Forbidden。我不确定问题是什么。

  1. @Configuration
  2. public class DemoSecurityConfig
  3. {
  4. @Bean
  5. public InMemoryUserDetailsManager userDetailsManager()
  6. {
  7. UserDetails john = User.builder()
  8. .username("john")
  9. .password("{noop}test123")
  10. .roles("EMPLOYEE")
  11. .build();
  12. UserDetails mary = User.builder()
  13. .username("mary")
  14. .password("{noop}test123")
  15. .roles("EMPLOYEE, MANAGER")
  16. .build();
  17. UserDetails susan = User.builder()
  18. .username("susan")
  19. .password("{noop}test123")
  20. .roles("EMPLOYEE, MANAGER, ADMIN")
  21. .build();
  22. return new InMemoryUserDetailsManager(john, mary, susan);
  23. }
  24. @Bean
  25. public SecurityFilterChain filterChain(HttpSecurity http) throws Exception
  26. {
  27. http.authorizeHttpRequests(configurer->
  28. configurer
  29. .requestMatchers(HttpMethod.GET, "/api/employees/").hasRole("EMPLOYEE")
  30. .requestMatchers(HttpMethod.GET, "/api/employees/**").hasRole("EMPLOYEE")
  31. .requestMatchers(HttpMethod.POST, "/api/employees").hasRole("MANAGER")
  32. .requestMatchers(HttpMethod.PUT, "/api/employees/**").hasRole("MANAGER")
  33. .requestMatchers(HttpMethod.DELETE, "/api/employees/**").hasRole("ADMIN")
  34. );
  35. http.httpBasic(Customizer.withDefaults());
  36. http.csrf(csrf->csrf.disable());
  37. return http.build();
  38. }
  39. }

字符串
谢谢你的帮忙。

njthzxwz

njthzxwz1#

我对Spring Security 知之甚少,但是.roles("EMPLOYEE, MANAGER, ADMIN")为什么要在单个字符串中以逗号分隔条目?查看文档不应该是这样的列表:.roles("EMPLOYEE", "MANAGER", "ADMIN")

相关问题