Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Security:按操作划分的海关当局_Java_Jdbc_Spring Security_Legacy - Fatal编程技术网

Java Spring Security:按操作划分的海关当局

Java Spring Security:按操作划分的海关当局,java,jdbc,spring-security,legacy,Java,Jdbc,Spring Security,Legacy,我需要使用SpringSecurity3启动一个遗留应用程序 此应用程序已具有以下安全数据模型: 非常简单。我可以编写自定义的usersByUsernameQuery和权限byusernamequery 问题是,还有一个表指示角色可以执行的操作(即@Service层方法): 因此,管理员可以通过web界面启用/禁用角色访问操作,而无需重新部署应用程序 例如,我仍然可以使用@Secure('ROLE_ADMIN')注释业务方法,但是我的自定义userdetails服务必须至少知道被保护的方法名

我需要使用SpringSecurity3启动一个遗留应用程序

此应用程序已具有以下安全数据模型:

非常简单。我可以编写自定义的
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
。很简单。我喜欢“操作角色”的概念,它真正描述了这种类型的安全策略。