是否可以将 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类