目前我们有 6 个 Maven 模块:
webapp
security
core
(提供对数据库的访问User
)common
module1
module2
我认为依赖树非常明显:
webapp
取决于一切security
取决于核心core
取决于共同点common
不依赖任何东西module1
取决于核心和共同点module2
依赖于core、module1和common
现在我想要一些BaseEntity
:它应该有一个@PrePersist
保存当前的User
. 几乎每个实体都会使用它BaseEntity
。这就是为什么每个模块都依赖于core
.
而且因为一切都取决于core
,所以将它BaseEntity
也放在core
模块中似乎是合乎逻辑的。(即使我更愿意使用common
它,但由于依赖关系,这似乎是不可能的)。
现在问题出现了:要设置当前用户,我必须使用 access SecurityContextHolder.getContext().getAuthentication().getPrincipal()
。但是有了这个我会有一些不必要的依赖(或者我只是太挑剔了吗?)。
如果我想要自定义实现UserDetails
. 我应该把它放在哪里?core
还是security
?或者只是让User
实体实现是很常见的UserDetails
?我不这么认为。问题出现了,因为在对用户进行身份验证时,我必须在模块UserDetails
内创建对象。security
当我想检索当前User
我必须将getPrincipal()
方法转换为自定义UserDetails
类。
我真的很困惑如何让事物保持松散耦合,但同时也实现了应用程序所需的一切。
我想到的最后一个想法是关于使用依赖注入,但我不知道它是否有效!?(在模块中有一个currentUser
Bean security
,其他人可以简单地通过 获取它@Autowired MyCustomUserDetails
)
所以请帮助我把这些事情做好!
谢谢!:)