spring - 一旦用户通过身份验证并且在授权他使用端点之前,更新 Authentication 对象中的权限
问题描述
我有一种情况,我必须根据用户的角色授权用户访问特定路径(端点)。问题:一旦用户通过身份验证,我会在身份验证对象中看到一组空的权限(授权过滤器使用它来确定用户的访问权限。)
我是 Spring Security 的新手,需要帮助来解决这个问题。
背景:我们在组织中实现了一个授权服务器,它使用 oauth2 并让我们进行单点登录。SSO 发生在前端,它从授权服务器获取令牌并将其嵌入到发送到我的服务器的每个请求中。现在我的服务器解码令牌并对用户进行身份验证。用户声明没有权限信息,我不允许在我的授权服务器中进行任何代码更改..
我在寻找什么:一旦用户通过身份验证并且在他进行授权之前(我在我的网络安全配置中使用过滤器),我想调用数据库并获取用户各自的角色并将其保存到我的身份验证对象,因此现在更新了权限,用户将被授权到端点。
解决方案
您可以创建一个并从注释中SecurityService
调用它@PreAuthorize
@GetMapping()
@PreAuthorize("securityService.hasRole('ADMIN', authentication.principal.username)")
public String getData() {
return "response";
}
并使用 rest 模板从 SecurityService 调用授权服务器,例如:
public class SecurityService {
public boolean hasRole(String role, String username) {
String role = restTemplate.getRoleByUserName...;
// check role
return false/true
}
}
推荐阅读
- c++ - 可以使用循环来收集多个变量吗?
- mysql - 与许多并发用户一起工作时如何只选择和更新一次行
- sql - 如何对多个表的重叠时间范围求和
- python - 如何从迭代中跳过一页?
- python - 使用 fit_generator() 时如何获取 y_true、y_pred?
- google-cloud-platform - GKE 私有集群中 --master-ipv4-cidr 的 CIDR 范围
- api - Cannot search for tweets using clojure twitter api twttr
- extjs - Gravatar 图像不会在 Ext JS 标头上呈现。Gravatar的代码块不起作用
- javascript - JavaScript 游戏结束提醒?
- laravel - 2 种多对多关系的方式只在 NeoEloquent 的一侧工作