【发布时间】:2013-07-23 06:22:25
【问题描述】:
目前我们有 6 个 Maven 模块:
webappsecurity-
core(提供对User的数据库访问) commonmodule1module2
我认为依赖树非常明显:
-
webapp取决于一切 -
security依赖核心 -
core取决于共同点 -
common不依赖任何东西 -
module1依赖于core和common -
module2依赖于 core、module1 和 common
现在我想要一些BaseEntity:它应该有一个@PrePersist,它保存了当前的User。几乎每个实体都会使用这个BaseEntity。这就是为什么每个模块都依赖于core。
因为一切都依赖于core,所以将这个BaseEntity 也放在core 模块中似乎是合乎逻辑的。 (即使我更愿意为此使用common,但由于依赖关系,这似乎是不可能的)。
现在问题出现了:要设置当前用户,我必须使用访问SecurityContextHolder.getContext().getAuthentication().getPrincipal()。但是有了这个我会有一些不必要的依赖(或者我太吹毛求疵了?)。
如果我想要自定义实现UserDetails,问题会变得更糟。我应该把它放在哪里? core 还是 security?还是让User 实体实现UserDetails 很常见?我不这么认为。问题出现了,因为在验证用户身份时,我必须在 security 模块内创建 UserDetails 对象。当我想检索当前的User 时,我必须将getPrincipal() 方法转换为自定义UserDetails 类。
我真的很困惑如何让事物保持松散耦合,但又要实现应用程序所需的一切。
我想到的最后一个想法是关于使用依赖注入,但我不知道它是否有效!? (在security 模块中有一个currentUser Bean,其他人可以通过@Autowired MyCustomUserDetails 简单地获取它)
所以请帮我把这些事情做好!
谢谢! :)
【问题讨论】:
-
嗨,本杰明,如果您能够以某种方式实现这一目标,您能否提供任何见解。对很多人都有帮助,因为它似乎仍然是许多人面临的一个活跃问题,但没有找到解决方案。
标签: spring maven spring-security dependencies multi-module