我需要让遗留应用程序开始使用spring安全3。
这个应用程序已经有了它的安全数据模型:

到目前为止很简单。我可以编写我的自定义usersByUsernameQuery和authoritiesByUsernameQuery。
问题是,还有另一个表指示角色可以执行的操作(即@Service层方法):

因此,管理员可以启用/禁用通过web接口访问操作的角色,而无需重新部署应用程序。
例如,我仍然可以用@Secure('ROLE_ADMIN')对业务方法进行注释,但是我的自定义UserDetailsService至少必须知道被保护的方法名,这样我才能执行正确的查询。
因此,问题是:我的自定义UserDetailsService是否可以拦截正在被保护的方法的名称?
发布于 2011-03-21 12:37:41
听起来您的访问决定是基于“操作角色”,而不是用户角色,因此在Security约束中直接使用“操作角色”可能更好。这本质上是一种RBAC方法,在用户角色和允许他们执行的操作之间存在映射。
您可以在AuthenticationProvider而不是UserDetailsService中解决这个问题,方法是在其中添加一个映射层,将用户角色(由UserDetailsService提供)转换为用户在应用程序中拥有的权限。这些将构成在由Authentication创建的AuthenticationProvider对象中返回的权限的集合。
映射层将直接使用您的管理接口提供的数据。
你可能想看看这份报告,由Mike,其中涵盖了类似的材料,以及其他事情。
也不是说SpringSecurity3.1将包含额外的GrantedAuthorityMapper策略,以便更容易地插入这类映射。
https://stackoverflow.com/questions/5373612
复制相似问题