2011-05-13 73 views
0

我想创建各种服务,如:弹簧休眠服务/ DAO安全设计查询

UserService 
UserPermissionService 
AddressBookService 

这将访问DAO的如:

UserDao 
UserPermissionDao 
AddressBookDao 
CompanyDao 

这些都将使用Spring,Hibernate的堆栈并封装在多个webapps的后端jar中。我希望服务功能可用,具体取决于调用用户对象的权限。另外,调用者(用户)对象将具有主叫用户的权限。

查询:我应该将Caller传递给每个Service方法调用,然后检查其权限吗?或者有更好的方法使用“Spring/AOP”和/或“工厂模式”,其中调用方对象可用于服务方法。

回答

2

这种情况下的模式之一是将安全令牌存储在一个ThreadLocal中,并要求在服务方法中首先从该令牌获得相应的权限。

+0

谢谢,你让我在正确的方向思考。在看以下问题后:http://stackoverflow.com/questions/2218282/should-i-put-my-threadlocals-in-a-spring-injected-singleton->我认为会议范围呼叫者对象是最好的案件。这本身会被注入到服务实现中。 – AM01 2011-05-13 21:32:03

+0

我们在应用程序中实现这个功能的方式是允许应用程序代码(我们或通过服务API的第三方)调用服务并登录到通过服务方法调用执行的审核日志配置更改。但是对于来自Web应用程序的请求,我们的确通过HttpServletRequest中的getUserPrincipal()获取用户。 – Olaf 2011-05-13 21:39:55