是否可以将 Spring Security 的 AOP 与 Java Security Manager 合并?

Posted

技术标签:

【中文标题】是否可以将 Spring Security 的 AOP 与 Java Security Manager 合并?【英文标题】:Is it possible to merge AOP of Spring Security with Java Security Manager? 【发布时间】:2012-11-18 08:16:32 【问题描述】:

有一个基于 Swing 的多层 Java 应用程序,每个模块都有其后端和前端。

现在我们想使用 Spring Security 添加安全性。我们决定不使用 AspectJ,因为它的开销很大。

是否有可能以某种方式将 Spring 方法调用授权注入 Java 安全管理器,以便后端中的每个方法调用都被 Spring Security 的基于注解的模型拦截(或委托给)?

注意:

该应用程序包含大量包,并且使用 new 运算符或通过反射技术实例化对象。不可能修改所有实例化并将所有对象更改为 Spring bean。无论对象是如何构造的,Java 安全管理器都会拦截所有方法调用。这就是我们需要以某种方式向 Java 安全管理器注入 Spring Security Method 授权的原因。

【问题讨论】:

【参考方案1】:

使用 Spring AOP 不需要 AspectJ,因此只要您使用 Spring 配置应用程序,使用本机 JDK 支持应该没有问题(无论如何它是默认设置)。我不确定您是否尝试过它并且它对您不起作用,因此问题中的一些更具体的信息可能会有所帮助。

Java 安全管理器可能是一种不必要的干扰,但如果您能更详细地解释您的意图,它可能也会有所帮助。

顺便说一下,我不确定您提到的 AspectJ 的开销是多少,但如果您认为这很重要,我建议您先进行测试,因为对于大多数应用程序来说,它在运行时肯定不会有很大的不同。它甚至可以比其他方法更快。

【讨论】:

应用程序包含大量的包,对象使用new 操作符或反射技术进行实例化。不可能修改所有实例化并将所有对象更改为 Spring bean。我们认为 Java 安全管理器会拦截所有方法调用,而不管对象是如何构造的。这就是我们需要以某种方式将 Spring Security 注入 Java Security Manager 的原因。 我明白了。据我所知,Java SecurityManager 在很大程度上是 API 设计者的选择——它不是面向方面的编程模型,如果你想添加未烘焙的规则,你必须在应用程序代码中显式调用它进入 JDK 库。因此,此时您的最佳选择肯定是 AspectJ。这些天使用可用的工具应该是一次很好的体验。

以上是关于是否可以将 Spring Security 的 AOP 与 Java Security Manager 合并?的主要内容,如果未能解决你的问题,请参考以下文章

将 Spring Security 与 EJB 或 Spring 一起使用?

Spring Security 构建基于 JWT 的登录认证

如何将 Spring Security 与我现有的 REST Web 服务集成

spring-security 登录 无法进入UserDetailsService类

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

Spring Security OAuth2:如何为两类用户提供两个单独的登录链接?