Java Spring Security:按操作划分的海关当局
我需要使用SpringSecurity3启动一个遗留应用程序 此应用程序已具有以下安全数据模型: 非常简单。我可以编写自定义的Java Spring Security:按操作划分的海关当局,java,jdbc,spring-security,legacy,Java,Jdbc,Spring Security,Legacy,我需要使用SpringSecurity3启动一个遗留应用程序 此应用程序已具有以下安全数据模型: 非常简单。我可以编写自定义的usersByUsernameQuery和权限byusernamequery 问题是,还有一个表指示角色可以执行的操作(即@Service层方法): 因此,管理员可以通过web界面启用/禁用角色访问操作,而无需重新部署应用程序 例如,我仍然可以使用@Secure('ROLE_ADMIN')注释业务方法,但是我的自定义userdetails服务必须至少知道被保护的方法名
usersByUsernameQuery
和权限byusernamequery
问题是,还有一个表指示角色可以执行的操作(即@Service
层方法):
因此,管理员可以通过web界面启用/禁用角色访问操作,而无需重新部署应用程序
例如,我仍然可以使用@Secure('ROLE_ADMIN')
注释业务方法,但是我的自定义userdetails服务必须至少知道被保护的方法名称,这样我才能执行正确的查询
因此,问题是:有没有一种方法可以让我的自定义UserDetailsService
截取被保护的方法名称?听起来您的访问决策是基于“操作角色”,而不是用户角色,所以在Spring安全约束中直接使用“操作角色”可能更好。这本质上是一种RBAC方法,其中在用户角色和允许其执行的操作之间存在映射
您可以在AuthenticationProvider
而不是UserDetailsService
中解决此问题,方法是在其中添加一个映射层,将用户角色(由UserDetailsService
提供)转换为用户在应用程序中拥有的权限。这些将构成由AuthenticationProvider
创建的Authentication
对象中返回的权限集合
映射层将直接使用管理界面提供的数据
你可能想看看Mike Weisner的作品,其中包括了类似的内容
也不是说Spring Security 3.1将包括一个额外的策略,使插入这种映射变得更容易。听起来您的访问决策是基于“操作角色”,而不是用户角色,因此最好直接在Spring安全约束中使用“操作角色”。这本质上是一种RBAC方法,其中在用户角色和允许其执行的操作之间存在映射
您可以在AuthenticationProvider
而不是UserDetailsService
中解决此问题,方法是在其中添加一个映射层,将用户角色(由UserDetailsService
提供)转换为用户在应用程序中拥有的权限。这些将构成由AuthenticationProvider
创建的Authentication
对象中返回的权限集合
映射层将直接使用管理界面提供的数据
你可能想看看Mike Weisner的作品,其中包括了类似的内容
也不是说Spring Security 3.1将包括一个额外的策略,使插入这种映射变得更容易。+1了解真正有用的详细答案和链接。我将发布结果。最后,我只需实现我的自定义UserDetailsService
。很简单。我喜欢“操作角色”的概念,它真正描述了这种类型的安全策略。+1提供了真正有用、详细的答案和链接。我将发布结果。最后,我只需实现我的自定义UserDetailsService
。很简单。我喜欢“操作角色”的概念,它真正描述了这种类型的安全策略。