【问题标题】:Authorization using Spring-Security (or) Spring only仅使用 Spring-Security(或)Spring 进行授权
【发布时间】:2014-03-09 23:22:43
【问题描述】:

我有关于授权和弹簧安全的问题。为了在我的一项服务中实现授权检查(在面向服务的架构环境下),我试图查看是否可以使用 Spring-Security。在浏览 Spring Security 文档时,我读到 here Spring Security 在内部使用 Spring 的 AOP。

参考您可以选择使用 AspectJ 或 Spring AOP 执行方法授权,也可以选择使用过滤器执行 Web 请求授权。您可以同时使用零个、一个、两个或三个这些方法。主流的使用模式是做一些web请求授权,再加上service层的一些Spring AOP方法调用授权。

我们已经在我们的服务实现中使用了 Spring AOP。在我的例子中,将到达我的 RESTful 服务的请求将携带一个自定义构建的令牌对象,应该对其进行处理以执行授权检查。

基于此,我想了解我是否可以简单地使用 Spring 并创建一个 Aspect 来捕获入站请求、提取和处理关联的(自定义构建的)令牌并根据结果继续/拒绝请求?鉴于通信通道已经使用 HTTPS 保护,我是否需要 spring-security ?

谢谢,

SGSI

【问题讨论】:

    标签: spring-security authorization user-permissions aspect


    【解决方案1】:

    对于类似的情况,我们很久以前做过以下操作:

    1. 使用 HTTP 过滤器从每个请求的 HTTP 标头中提取令牌。
    2. 将提取的标头存储到线程上下文中。
    3. 围绕服务方法调用添加了一个方面,以检查令牌的线程上下文。

    这个策略对我们很有效。在过去的很多年里,我一直在使用 Spring Security,因为它对此类问题有更经过测试和更全面的实现。

    如果您想编写自己的令牌传递实现,可以查看 Spring Security 类SecurityContextHolder 的源代码,它提供了多种在执行线程上传递安全信息的方式。

    【讨论】:

    • 但是使用 Spring Security 会带来什么额外的好处,如果 - (1) 我将处理令牌并做出 go/no-go 决定 (2) Spring Security 将创建一个过滤器来处理令牌,无论如何我都可以使用 Spring Around Aspect 来做到这一点。请注意,身份验证已经到位,对于授权,我只需要处理我们的自定义令牌并在它到达 doPost() 之前做出决定。 Spring Security 会给我额外的 Spring 可能无法提供的东西?
    • 我完全同意 Spring Security 可能不会为您描述的用例提供任何额外的好处。我同意您的观点,您可以使用方面来强制执行您描述的那种授权要求。我提到 Spring Security 类只是为了实现它,您可能会发现它在应用层之间传递安全令牌时很有用。
    猜你喜欢
    • 2015-07-17
    • 1970-01-01
    • 2011-10-12
    • 2011-11-27
    • 2021-10-14
    • 2014-03-06
    • 2017-12-08
    • 2017-05-10
    • 2013-03-15
    相关资源
    最近更新 更多