Spring Security@PreAuthorize,应用程序本身作为用户
我已经用SpringSecurity设置了一个spring应用程序。我已经用@PreAuthorize(…)注释了我的服务方法。因此,网络上的每个人都需要一些特定的权限来访问这些方法,这很好 但现在我有了一个新的用例。有一个@Scheduled方法正在运行,用于执行一些检查和发送消息。目前,只有角色为_USER的用户才允许发送消息。但现在应用程序本身也必须发送这些消息 我应该如何设法拥有某种不可见的用户(=应用程序),该用户一直登录并拥有特定的权限?或者“所有权利”也不错,所以它忽略了所有这些安全注释。 或者我根本不需要“用户” 谢谢你的帮助 编辑:主要的两个问题是:Spring Security@PreAuthorize,应用程序本身作为用户,spring,spring-mvc,spring-security,Spring,Spring Mvc,Spring Security,我已经用SpringSecurity设置了一个spring应用程序。我已经用@PreAuthorize(…)注释了我的服务方法。因此,网络上的每个人都需要一些特定的权限来访问这些方法,这很好 但现在我有了一个新的用例。有一个@Scheduled方法正在运行,用于执行一些检查和发送消息。目前,只有角色为_USER的用户才允许发送消息。但现在应用程序本身也必须发送这些消息 我应该如何设法拥有某种不可见的用户(=应用程序),该用户一直登录并拥有特定的权限?或者“所有权利”也不错,所以它忽略了所有这些安
我认为将来我希望从应用程序的不同子系统发送消息。因此,使用admin用户是没有选择的,因为我需要几个不同名称的用户。我认为您提供的所有答案都是相当常见的解决方案,因此这在很大程度上取决于您的需求。我正在开发的应用程序有一些严格的审计要求,因此我们为应用程序本身设置了一个用户,当它需要通过调度器调用服务时可以使用。这允许我们根据给定的原则登录。也许您应该澄清您的需求?我遇到了类似的问题,我实现的解决方案是内部和“外部”服务实现。外部的有内部的自动连接。任何应用程序内部组件(如计划作业)都会连接到内部服务。任何Web公开的组件都会连接到安全的“外部”服务,该服务会有
@PreAuthorize
等注释,但在其他情况下,这些注释将充当内部服务的委托
在将消息传递到内部服务之前,我还记录了用于授权的身份验证对象的主体。您知道在SecurityContext中会有一个可用的,所以选择它并在日志中记录外部调用内部服务的人。我执行以下操作(您的委托人可以是非用户名,但仍然希望共享):
这就像:调度器检查表A中是否有用户X的新条目。如果有新条目,系统将为该用户X生成一条消息,该消息包含一些文本和指向这些新条目的链接。没什么特别的。。。我只需要回答两个问题(我将在一分钟后把它们附加到问题后面)我工作的企业使用ldap访问的中心目录。我们已经有一个系统用户进入了这个系统。我们从每个环境中的系统管理员提供给系统的属性文件中获取凭据。属性文件用于在需要时查找凭据。我们不缓存主体,因为在我们的情况下,它必须在每次调用之前进行身份验证。将凭据硬编码到应用程序中并不是一个好主意,在应用程序中可以对其进行反向工程。此外,每个环境中的凭证往往不同——开发、集成、qa、预生产和生产。
final String currentUser = SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString();