【发布时间】:2021-01-19 00:27:43
【问题描述】:
我正在尝试通过使用 UserDetailsService 提供身份验证来访问我在邮递员上的 rest api,但每次我在每次请求时都发出 403 Access Denied 的请求。 POST 和 GET 方法的行为相同。我已经阅读了论坛上记录的其他问题,但每个答案都说这是由于 CSRF,我禁用了它,但问题仍然存在。
完整代码开启:https://github.com/afulz29/spring-security-demo.git
请帮助我,3 天以来我一直在努力解决这个问题。
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class ApplicationSecurityConfig extends WebSecurityConfigurerAdapter implements WebMvcConfigurer{
@Autowired
UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.userDetailsService(userDetailsService)
.passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http
.authorizeRequests()
.antMatchers("/api/**").authenticated().anyRequest().hasAnyRole("ADMIN");
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedMethods("*");
}
}
@RestController
@RequestMapping("/api")
public class UserController {
@Autowired
private UserService userService;
@GetMapping(path = "/users")
public User getUserById(@RequestParam("userId") Integer userId) {
return userService.getUserById(userId);
}
@PostMapping(path = "/users", consumes = MediaType.APPLICATION_JSON_VALUE)
public User addUser(@RequestBody User user) {
return userService.addUser(user);
}
}
【问题讨论】:
-
你在控制台打印了什么吗?这似乎不是春季安全问题。如果安全不允许,spring 通常会返回 401
-
控制台上没有错误,请您帮助理解代码中的错误。我已经提供了有问题的 git 存储库 url。
-
我下载了repo。但无法在我的本地导入。似乎构建也有一些问题。让我再试一次
-
我仍然无法加载您的项目并运行。遇到一些配置问题。如果我成功了会更新。
-
好的。谢谢你。如果您发现不正确的地方,请告诉我。
标签: spring-boot spring-security spring-data-jpa spring-security-rest