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