gpt4 book ai didi

Spring Security @PreAuthorize 应用程序本身作为用户

转载 作者:行者123 更新时间:2023-12-04 18:27:18 25 4
gpt4 key购买 nike

我有一个设置了 spring 安全性的 spring 应用程序。我已经使用@PreAuthorize(...) 注释了我的服务方法。因此网络上的每个人都需要一些特定的权限来访问这些方法,这很好。

但现在我有了一个新的用例。有一个 @Scheduled 方法正在运行以进行一些检查和发送消息。目前只允许拥有 ROLE_USER 的人发送消息。但现在应用程序本身也必须发送这些消息。

我应该如何设法让某种不可见的用户(= 应用程序)始终登录并具有特定权限?或者也许“所有权利”也不错,所以它只是忽略所有这些安全注释。或者也许我根本不需要“用户”?

感谢您的帮助!

编辑:主要的 2 个问题是:

  1. 我应该为应用程序创建一个真实用户吗?意思是:数据库用户表中的一个条目?你是如何解决这个问题的?也许您只是使用管理员用户(真人)的用户帐户?

  2. 如果我现在有这个“系统”用户。 “使用”它的最佳方式是什么?例如,我会使用@Autowired User systemUser 在我需要的任何地方访问这个用户。 (当然,我在应用程序配置中为这个特定用户创建了一个 bean)。

EDIT2:更多想法:

我想将来我想从应用程序的不同子系统发送消息。所以使用 admin 用户是别无选择,因为我需要几个不同名称的不同用户。

最佳答案

我遇到过类似的问题,我实现的解决方案是内部和“外部”服务实现。外部组件自动连接内部组件。任何应用程序内部组件,如您的预定作业,都将连接内部服务。任何暴露于 Web 的组件都将具有安全的“外部” " 服务已连接,其中包含 @PreAuthorize 等注释,但除此之外将充当内部服务的委托(delegate)。

在将消息传递到内部服务之前,我还记录了用于授权的身份验证对象的主体。您知道您将在 SecurityContext 中有一个可用的,所以将其挑出来并在您的日志中记下外部调用内部服务的人。我执行以下操作(您的委托(delegate)人可能不是用户名,但仍然想分享):

final String currentUser = SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString();

关于Spring Security @PreAuthorize 应用程序本身作为用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21078180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com