3

Quartz を使用して、春のアプリに cronjobs を追加しました。

これらのジョブ内で、別のアプリからスプリング セキュリティで保護された Bean メソッドにアクセスしたいと考えています。

これが私のアプリケーション構造です。

| | - コア
| - ウェブアプリ
| - 求人アプリ

webapp と jobsapp の両方がコア サービスを使用します。jobsapp は Web アプリケーションではありません。クォーツの仕事が入っているだけです。

SpringSecurity global-method-security を使用して保護されている Bean にアクセスしようとすると、ジョブ内で例外が発生します{org.springframework.security.AuthenticationCredentialsNotFoundException}"org.springframework.security.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext"

SecurityContextHolder.getContext().setAuthentication を使用してコンテキストをパワー ユーザーに設定すると、機能します。

しかし、私はすべての仕事のためにこれをしなければなりません。

すべてのジョブを特定のユーザーとして実行する方法はありますか? どこかに何らかの設定があるかもしれませんか?

4

1 に答える 1

1

次の 2 つの選択肢があります。

  • @Securedサービスから Web レイヤーまで、注釈を上に移動します。私が正しく理解している場合、Quartz ジョブはサービス Bean に直接 (Web レイヤーをバイパスして) アクセスするため、セキュリティもバイパスします。

  • 説明したように、Run-As 機能を実装します。そのマニュアルである必要はありません。テンプレート メソッド パターンまたはいくつかの AOP + 注釈を試してください。かなりきれいになります。

両方のアプローチを試してみましたが、セキュリティを Web レイヤーに移行することで、わずかにうまくいきました。これが可能になったのは、サービス レイヤーが Spring MVC コントローラー メソッドにうまくマッピングされていたからです。

于 2012-09-10T11:28:09.217 に答える