编程语言
首页 > 编程语言> > Spring Security @PreAuthorize以用户身份使用应用程序本身

Spring Security @PreAuthorize以用户身份使用应用程序本身

作者:互联网

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

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

我应该如何管理某种不可见的用户(=应用程序),该用户一直被登录并具有特定权限?也许“所有权利”也会很好,所以它只是忽略了所有这些安全注释.
或者,也许我根本不需要“用户”?

谢谢你的帮助!

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

>我应该为该应用程序创建一个真实用户吗?意思是:数据库的用户表中有一个条目?您是如何解决的?也许您只是使用管理员用户(是真实用户)的用户帐户?
>如果我现在有了这个“系统”用户. “使用”它的最佳方法是什么?例如,我将在需要的地方使用@Autowired User systemUser访问该用户. (当然,在应用程序配置中有一些要与该特定用户创建bean的地方).

EDIT2:更多想法:

我认为将来我想从应用程序的不同子系统发送消息.因此,没有选择使用admin用户,因为我需要几个具有不同名称的不同用户.

解决方法:

我遇到了类似的问题,我实现的解决方案是内部和“外部”服务实现.外部组件自动连接了内部组件.任何应用程序内部组件(例如您计划的作业)都将连接内部服务.任何Web公开组件都将连接安全的“外部”服务,该服务将带有@ PreAuthorize等注释已就位,否则将仅充当内部服务的委托.

在将消息传递到内部服务之前,我还登录了用于授权的身份验证对象的主体.您知道在SecurityContext中将有一个可用的,因此将其选中,然后在日志中记录外部调用内部服务的人员.我执行以下操作(您的委托人可以是非用户名,但仍然想共享):

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

标签:spring-security,spring,spring-mvc
来源: https://codeday.me/bug/20191122/2058347.html