@Repository
beanからSpring Securityコンテキストにアクセスすることは安全ですか?春セキュリティコンテキストと@Repository bean
私たちはいくつかの@Repository
持っているとしましょう:
public interface FooService {
Foo getFoo();
}
@Service
public class FooServiceImpl {
@Autowired FooRep fooRep;
public Foo getFoo() {
return fooRep.getFoo();
}
}
そして私たちは、このメソッドは、セキュリティで保護されたコントローラからアクセスされていることを言わせて、そのようなこと:それは、サービス層に包まれ
public interface FooRep {
Foo getFoo();
}
@Repository
public class FooRepImpl {
public Foo getFoo() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return (Foo)authentication.getDetails();
}
}
を:
@RestController
@Secured
public void FooController {
@Autowired FooService fooSer;
@RequestMapping("/foo");
public Foo getFoo() {
return fooSer.getFoo();
}
}
これは非常に単純化された例ですが、必須のpa論理のrtがここにあります。
なぜ私はそれが必要なのか、私にこのアーキテクチャの再構築方法のアドバイスはしないでください。
マルチスレッドの使用に関連する問題が発生する可能性はありますか?
authentication.getDetails()
には、認証インターセプタに配置されているものと異なるFoo
インスタンスが含まれていた経験があるため、質問があります。これは非常に奇妙で不可能に見えます。
私が提供したシナリオ(コントローラ - >サービス - >リポジトリ)とどのように説明したシナリオが一致しますか? – Andremoniy
シンプルなケースでは問題ありませんが、マルチスレッドについて質問しました。潜在的な問題について説明しました。一般的には、レイヤーを保つ方が、コントローラからの認証を取得し、直接アクセスではなくパラメータとしてリポジトリへのサービスに移行することができます。 – StanislavL