仅使用 Spring-Security(或)Spring 进行授权

Posted

技术标签:

【中文标题】仅使用 Spring-Security(或)Spring 进行授权【英文标题】:Authorization using Spring-Security (or) Spring only 【发布时间】: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

【问题讨论】:

【参考方案1】:

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

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

这个策略对我们很有效。在过去的很多年里,我一直在使用 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 类只是为了实现它,您可能会发现它在应用层之间传递安全令牌时很有用。

以上是关于仅使用 Spring-Security(或)Spring 进行授权的主要内容,如果未能解决你的问题,请参考以下文章

spring-security 如何使用用户名或邮箱登录

oauth2 spring-security 如果您在请求令牌或代码之前登录

您如何在 spring-security 中注销所有已登录的用户?

SpringSecurity基本搭建

Spring Security 如果是404直接报错,不要跳转认证?

spring-security.xml 文件的解析错误