我有一个应用程序,我们试图通过授权检查来保护我们的服务层,以确保授权用户具有执行更新的适当权限。我们的第一个简单规则是对象的所有者可以更新对象,因此安全检查将登录用户与对象的所有者进行比较。不幸的是,这不起作用,因为该对象存储在 Neo4j 图形数据库中,该数据库使用 AspectJ 生成存储库级别的对象。当我尝试构建使用@PreAuthorize 保护的服务层的应用程序时,我收到一条错误消息,指出在 AutoWire 链中它无法自动连接 Neo4j 存储库对象......这对我来说很有意义,因为被 AutoWired 的对象实际上是一个接口AspectJ 构建成一个对象供我们使用。
我尝试更新到 Spring-Security 3.1.0,我设置了 aspectj-autoproxy,我尝试将 type="aspectj" 属性添加到我的 global-method-security 定义中,但是编译器将“type”标记为无效属性并且我仍然遇到自动接线问题。
在对模型进行了更多审查之后,我有点担心这种方法注定会失败。各种控制器和其他业务逻辑单元直接调用服务层,我相信这最终会完全绕过 spring-security 代理对象。
有没有办法使用从 AspectJ 自动生成的 Neo4j 存储库对象作为 spring-security 检查中的数据存储库?
有没有办法使用 spring-security 保护服务层?还是直接调用服务层会完全绕过安全层?