現在、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
)
だから、それらを正しくするのを手伝ってください!
ありがとうございました!:)