ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-22 08:19:31  阅读:1178  来源: 互联网

标签:spring-security spring spring-mvc


我已经用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有