我使用spring security @PreAuthorise来检查谁和谁不能访问我的服务层中的方法。它工作得很好。通常我的服务方法用
注释@PreAuthorize("hasAnyRole('MY_USER_ROLE')")
我的问题是我有一个由几个jar文件组成的war文件。每个jar文件都负责一段业务逻辑。我现在想要一个jar文件中的一个服务来访问另一个jar文件中的另一个服务。由于权限,这会被拒绝。如果我注释掉了许可,那么一切正常。
在调用此服务之前,我是否可以通过spring进行身份验证? (也许是一个假用户?)或者可能关闭同一个应用程序中的jar的安全性?或者我的设计错了吗?
其他人有这种问题吗?我应该使用什么样的设计?
答案 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