3

我正在使用 spring security @PreAuthorise 来检查谁和谁不能访问我的服务层中的方法。它真的很好用。通常我的服务方法都带有注释

@PreAuthorize("hasAnyRole('MY_USER_ROLE')")

我的问题是我有一个由几个 jar 文件组成的战争文件。这些 jar 文件中的每一个都负责一段业务逻辑。我现在想要一个 jar 文件中的一项服务访问另一个 jar 文件中的另一项服务。由于权限,这被拒绝。如果我注释掉许可,那么一切正常。

无论如何我可以在调用此服务之前通过 spring 进行身份验证吗?(也许有一个虚拟用户?)或者可能关闭同一应用程序中 jar 的安全性?还是我的设计错了?

其他人有这种问题吗?我应该改用什么设计?

4

2 回答 2

2

您需要为调用服务的线程(在另一个 jar 中)提供@PreAuthorize(对于调用的服务)所需的权限。

如果线程是由用户请求在 Web 应用程序中触发的,那么这通常是用户权限。

但是如果线程是由某个计时器服务触发的,那么您需要给他们正确的身份验证

    Authentication authentication = new UsernamePasswordAuthenticationToken("dummy", "password");
    SecurityContext securityContext = SecurityContextHolder.getContext();
    securityContext.setAuthentication(authentication);
于 2012-09-29T06:15:07.343 回答
-2

我相信这是一个很好的例子,你应该使用 Spring security @Secured 注解

  • 什么是@Secured 注解?
    从 2.0 版开始,Spring Security 大大改进了对向服务层方法添加安全性的支持。它提供对 JSR-250 注释安全性以及框架的原始 @Secured 注释的支持。

    来源:Spring Security 3.1 参考 2.4 方法安全
    @Secured 注解允许您在方法中设置限制。例如,您可以授权所有注册用户都可以访问 get() 方法。但是对于 edit() 方法,您可以将其标记为仅供管理员访问。

在以下位置查看一些教程:
http ://burtbeckwith.com/blog/?p=1398
http://krams915.blogspot.in/2010/12/spring-security-3-mvc-using-secured.html

于 2012-09-28T18:54:54.507 回答