【问题标题】:Spring Security: how to provide access to respective users to access same Restful Web ServicesSpring Security:如何为各个用户提供访问相同的 Restful Web 服务的访问权限
【发布时间】:2015-07-14 08:56:10
【问题描述】:

Spring Security 问题:- 我正在为我的应用程序使用 Spring Security(最新版本 3.2.7.RELEASE 和 Spring Framework 版本 4.0.9.RELEASE),我有一些情况我不明白如何提供分别访问两者。寻求尽快的回复。

场景:我有两种不同类型的用户,其中 TESTER 的权限低于 DEVELOPER

  • ROLE_DEVELOPER
  • ROLE_TESTER

在我的应用程序中,通过用户界面 - 我具有开发人员和测试人员共有的更新“分析”功能。我想让 DEVELOPER 只更新他自己的“分析”(如果他使用 DEVELOPER 访问权限登录)和 TESTER 更新他自己的分析(如果他使用 TESTER 访问权限登录)。他们应该只能看到彼此的分析,如只读格式,但不能更新彼此的分析。

以下是映射到相应 RestFul Web Serices (WS) 的 Spring Security 过滤器,我该如何开发以满足上述两个条件?

注意:我想只使用 XML 配置(不带注释)

<intercept-url method="PUT" pattern="/user/update/analysis/**" 
    access="hasRole('ROLE_TESTER')" />

        <intercept-url method="PUT" pattern="/user/update/analysis/**" 
    access="hasRole('ROLE_DEVELOPER')" />  

 <intercept-url method="GET" pattern="/user/GET/analysis/**" 
access="hasRole('ROLE_DEVELOPER')" />
    <intercept-url method="GET" pattern="/user/GET/analysis/**" 
access="hasRole('ROLE_TESTER')" />

【问题讨论】:

    标签: spring-mvc spring-security


    【解决方案1】:

    选项 1: 如果您使用的是 Spring 3.1 和更新版本,您可以通过扩展 RequestMappingHandlerMapping 创建自定义的“getCustomMethodCondition”方法。因此,通过实现方法重载,您可以引导用户使用正确的方法。

    在此处查看以下类似问题的答案:

    选项 2: 一旦您已经在该方法中,获取与该用户关联的 ROLE,然后为每种类型的用户激活相关进程。

    例如

    userrole = user.getRole();
    if(userrole = "ROLE_DEVELOPER) {
    //do this stuff
    }
    else if(userrole = "ROLE_TESTER") {
    // do this stuff
    }
    

    希望这有助于引导您朝着正确的方向前进。

    【讨论】:

    • 谢谢 - 但是我们如何仅通过 XML 配置来实现呢?
    • 究竟是什么部分?他们都是不同的,做事也不同。
    • 我的意思是以上所有功能都应该通过 XML 配置来实现..
    • 不,所有这些都需要您进行java编码。选项 1 XML 配置只能指向定制的自定义 RequestMappingHandlerMapping 作为示例。选项 2 仅在控制器本身的方法中完成。在 XML 中做到这一点的唯一方法是为不同的角色设置不同的 url,这是你不想要的。
    猜你喜欢
    • 2019-10-24
    • 2013-10-18
    • 2015-10-21
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    相关资源
    最近更新 更多