Spring security @PreAuthorize(“hasAnyRole('....')”)

时间:2012-09-28 18:31:37

标签: java spring spring-security

我使用spring security @PreAuthorise来检查谁和谁不能访问我的服务层中的方法。它工作得很好。通常我的服务方法用

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

    Authentication authentication = new UsernamePasswordAuthenticationToken("dummy", "password");
    SecurityContext securityContext = SecurityContextHolder.getContext();
    securityContext.setAuthentication(authentication);

答案 1 :(得分:-2)

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

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

    来源:Spring Security 3.1 Reference 2.4 Method Security
    @Secured注释允许您在方法中加入限制。例如,您可以授权所有人都可以访问get()方法 注册用户。但对于edit()方法,您可以将其标记为 只能由管理员访问。

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