首页 > 解决方案 > 如何在 Spring Boot 的每个 REST 调用中使用 Spring Security?

问题描述

我试图了解是否有一种方法可以使用弹簧安全性来帮助我的用例。基本上,我想在spring boot中的每个REST调用上调用spring security,而不是在应用程序启动期间调用一次,并找到用户的角色并根据用户角色进一步限制端点。

我有 3 个不同的休息控制器,即/admin1/*, /admin2/*, /admin3/*
我尝试如下手动限制端点。

http.authorizeRequests()
        .antMatchers("/admin1/**").permitAll()
        .and()
    .authorizeRequests()
        .antMatchers("/admin2/**").permitAll()
    .anyRequest().authenticated();

这实际上将允许/admin1/*/admin2/*API 工作和限制/admin3/*。但是,我的用例如下。

在每个休息调用中,我们在标头中传递用户 ID。我想在每个 rest 调用中使用 spring security,并使用标题中的用户 id 从数据库中查找用户角色。

如果用户具有ADMIN 1用户角色,我们只需启用/admin1/*端点并限制/admin2/*/admin3/*. 同样,如果用户具有ADMIN 2用户角色,我们只需启用/admin2/*端点并限制/admin1/*/admin3/*。同样,如果用户具有ADMIN 3用户角色,我们只需启用/admin3/*端点并限制/admin1/*/admin2/*

有没有办法使用spring security来实现这一点?

谢谢

标签: javaspring-bootspring-security

解决方案


据我了解,您希望在每次通话时对用户进行身份验证和授权。真的?

一种方法是使用 JWT(JSON Web 令牌)标记您的 REST API。

https://dzone.com/articles/spring-boot-security-json-web-tokenjwt-hello-world中的示例可能会有所帮助。

我还建议不要使用 antMatchers Inconfigure方法来限制URL基于 的访问,而是在要保护的类或方法上方Roles使用注释。@PreAuthorize and @PostAuthorize这种方式为您的限制政策提供了更大的灵活性。

https://www.baeldung.com/spring-security-method-security中的示例也可以帮助您。


推荐阅读