問題タブ [spring-java-config]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - Spring Java @Configuration を使用して複数の entityManagerFactory Bean を定義する
システムで複数のデータベースを使用しています。AtomikosDataSourceBean
複数のデータベース間で xa 分散トランザクションを有効にするために使用しています。
spring-configuration.xml
ファイルでは、entityManagerFactory1 と entityManagerFactory2 などの 2 つの個別の Bean を作成できますEntityManagerFactory
。しかし、Spring Java を使用して実行すると@Configuration
、エラーが発生します。
1 つを entityManagerFactory として作成し、もう 1 つを entityManagerFactory1 として作成すると、次のようなエラーが発生します。
entityManagerFactory1 の下に作成されたエンティティ用。
Spring Java @Configuration で 2 つの別個の entityManagerFactory を定義する方法を理解するのを手伝ってくれますか。
java - Spring Java 構成のアノテーションでのプレースホルダーの使用
私は、Spring のプロパティ置換メカニズムに少し戸惑っています。この Java Config があるとしましょう
次に、次のようなカスタム プレースホルダーを使用して、Spring-Data アノテーションを追加し、@EnableMongoRepositories
スキャン用のカスタム ベースパッケージを定義します
@EnableMongoRepositories("${my.custom.repobasepackage}")
。プレースホルダーは私の default.properties で定義されています。
ただし、このプロパティはここでは解決できません。Spring のプロパティ置換をさらに詳しく調べると、プロパティを解決しようとしていることがわかります。
ただし、プレースホルダーを置き換えるために使用される基本Environment
クラスは、私の PropertyPlaceholderConfigurer については認識していませんが、私の SystemProperties と VM-Props についてしか認識していません。:-(
org.springframework.context.annotation.ClassPathBeanDefinitionScanner#getOrCreateEnvironment.java#339 ( Spring 4.0.1 を使用しています) で「PropertyPlaceholder」が既に配置されていることがわかります。したがって、初期化の順序の問題ではありませんが、使用された BeanDefinitionRegistry は Interface を実装していないため、使用されませんEnvironmentCapable
。ここで、Spring App-Context Bootstrap に関する私の理解は終わりです。
誰か助けてくれませんか?Environment
プロパティ プレースホルダーを使用するインスタンスを提供できる BeanDefinitionRegistry はありますか?
どんな助けでも大歓迎です!! 私はあなたのためにクッキーを持っています!:-))
乾杯、ステファン
java - 実行時にロードする JavaConfig クラスを決定する
@Configuration で注釈が付けられた複数のクラスがあり、コンテキストに登録するものを最上位の構成コンポーネントで決定したいと考えています。
@Profile を使用して複数の構成クラスから選択できることを理解しています。ただし、私はすでにプロファイルを使用して環境を区別しています。構成クラスの選択は、環境に依存しません。
ロードする構成クラスを実行時に選択するにはどうすればよいですか?
"Production, WithDatabase" のような複数のアクティブなプロファイルを持つことはできますか?
その場合、プロパティに基づいてプロファイルを追加するにはどうすればよいですか?
java - Spring セキュリティ カスタム トークン フィルター
トークンを取得して検証するカスタム フィルターを実行しようとしています。私はこの応答のアプローチに従っています。
これは関連する設定です:
セキュリティ構成:
AuthenticationTokenFilter:
トークン認証:
TokenAuthenticationProvider:
しかし、AuthenticationTokenFilter がチェーンに追加されていないようです。デバッグ 呼び出しを行うと、SecurityConfig および configure メソッドに入りますが、フィルターには入りません。何が欠けている?
java - Java Config を使用した Spring Security 匿名アクセスに関する混乱
Spring Security で次の Java Config を使用しています。
この構成に基づいて、すべての要求が認証されます。認証されずにコントローラをヒットするAnonymousAuthenticationFilter
と、 は で Authentication オブジェクトを作成しますusername=anonymousUser, role=ROLE_ANONYMOUS
。
特定のコントローラーメソッドへの匿名アクセスを提供しようとしており、次のそれぞれを使用しようとしました:
@Secured("ROLE_ANONYMOUS")
@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
コントローラ メソッドが呼び出されると、「HTTP ステータス 401 - このリソースにアクセスするには完全な認証が必要です」という応答が返されます。
ROLE_ANONYMOUS
このメッセージが表示される理由と、IS_AUTHENTICATED_ANONYMOUSLY
この構成を使用して動作しないように見える理由を理解するのに誰か助けてもらえますか?
ありがとう、
JP
java - JavaConfig を使用した Spring MVC & Security 3.2 - WebApplicationContext の初期化、破棄、再初期化
今週、webapp 全体を xml config から JavaConfig に切り替えました。いくつかの奇妙な行動に気付きました。Tomcat が統合された Netbeans を使用しています。アプリをデプロイすると、ログに次のように表示されます。
他にも 2 回実行されているものがあります... ディスパッチャー サーブレット コンテキストで ContextRefreshedEvents をリッスンするクラスがあります。Web アプリをデバッグすると、このコードが実行されているかのようにログ ステートメントが表示されますが、設定したブレークポイントには一度もヒットしません。そのミステリー コンテキストが完全に初期化されたように見えた後、明らかに破棄された後、再び初期化されます。今回は、ブレークポイントがヒットし、コードをステップ実行できます。私の構成ファイルはすべて、私が読んだすべてのものに基づいて正しく構成されていると思います.root/dispatcherコンポーネントは相互に排他的にスキャンし、同じパッケージをスキャンしません.
これは、BCryptPasswordEncoder をセットアップしようとしているため、より大きな問題になりつつあります。上記のような不気味な問題が発生しています。CustomUserDetailsService から取得したにもかかわらず、CustomAuthenticationProvider からのステートメントのログをデバッグしたり、表示したりできなくなりました。どういうわけか、作成された最初のゴーストコンテキストから CustomAuthenticationProvider のキャッシュされたインスタンスを使用していると思い始めています。これを理解するための助けをいただければ幸いです。
私のパッケージは非常にフラットに設定されています。つまり、x.controllers、x.services、x.domain、x.dao、x.configuration などです。そのため、いくつかの excludeFilters を使用して、適切なコンテキストが適切なコンポーネントをスキャンしていることを確認する必要があります。 . とにかく、ここに私の設定があります:
AbstractAnnotationConfigDispatcherServletInitializer:
サービス構成:
セキュリティ初期化子:
セキュリティ構成:
MVC 構成:
私のコンテキストがリスナーを更新しました:
関連性があるとは思わないため、永続化とログの構成は省略します... 私の PersistenceConfig クラスには次の注釈が付けられています。
Log4jConfig には次の注釈が付けられます。
奇妙に感じるかもしれないことの 1 つは、Initializer が @Configuration でアノテーションを付けられた ApplicationListener クラスを実装していることです。コンポーネントのスキャン中にルート ServiceConfig がそれを取得せず、ディスパッチャ サーブレット コンテキストでのみ作成されるように、単純にこれを行いました。
多くの苦痛と苦悩の後、問題は特に私のSpring構成ではなく、AbstractAnnotationConfigDispatcherServletInitializerクラスに欠けているものだと考えています...どういうわけか、何かがそれを倍増させています。protected WebApplicationContext createRootApplicationContext() または public void onStartup(ServletContext servletContext) throws ServletException またはコンテキストを手動で作成する何かをオーバーライドする必要がありますか?
アップデート
AbstractAnnotationConfigDispatcherServletInitializer の拡張元である WebApplicationInitializer と AbstractSecurityWebApplicationInitializer の拡張元である WebApplicationListener の両方を使用することが、この根本的な原因であるという疑いがありました。スプリング セキュリティ フィルター チェーンを登録していないため、スプリング セキュリティが失敗することはわかっていましたが、このクラスを削除して、問題が解決するかどうかを確認することにしました。違いはありません。
欲求不満から、グラスフィッシュをダウンロードしてそこに展開することにしました。初めてデプロイしたときは、1回しか実行されませんでした! 展開されましたが、明らかに、春のセキュリティが壊れているため、サインインできませんでした. テストとして、「public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {}」クラスを再度追加して、何が起こるかを確認しました。予想通り、問題が再発しました。すべてが2回実行されました。SO、もう一度削除しましたが、まったく同じ問題に悩まされています。それはまだコンテキストを構築しており、初期化を実行し、コンテキストを破棄してから、最初からやり直しています。2 番目に登録された WebApplicationInitializer が何らかの形で Web サーバーにスタックまたはキャッシュされているようです。それが私が考えることができる唯一の説明です....だから私は'
java - Java Config による Autowire セッターのオーバーライド
次のクラスを検討してください。
たとえば、Spring がインジェクションの候補を 1 つも見つけられない場合など、autowired インジェクションをオーバーライドする必要がある場合があります。XML では、次の例を使用できます。
Java Config で同じことを行う方法はありますか? Spring は myBean メソッドから返された後にプロパティを自動配線しようとし、NoUniqueBeanDefinitionException で失敗するため、次は機能しません (理由は理解しています)。
MyBean クラスを変更することは、たとえば、外部ライブラリからのものであるため、常にオプションとは限りません。これは、XML 構成を使用しなければならないケースですか?
ありがとう、アンドレア・ポルチ
更新 2 つのソリューション (名前によるインジェクションと @Primary の使用) に感謝しますが、それらは私のユース ケースを解決しないため、より具体的に説明する必要があると思います。
私のユースケースでは、 MyBean クラスは外部ライブラリから取得されるため、変更はできません。また、MyBean の複数のインスタンスが必要で、それぞれが A インターフェースの異なるインスタンスを注入します。これを反映するために上記のコードを更新しました (xml と Java の両方)。
Java configを使用した解決策はありますか? MyBean への依存関係の自動配線を回避することは可能ですか? (そのクラスの Bean でのみ、コンテキスト内のすべての Bean の自動配線を完全に無効にしないでください)
spring - Spring Secuirty を使用したログインバー
Spring Boot と Spring Security を使用して、Spring ベースの Web アプリケーションを開発しています。
私は具体的で詳細なログインページを持っていますが、迅速なログイン{mywebapp}/login
機能を提供する目的で、すべてのページにログインバーも設置したいと考えています。この目標を達成するためにプロジェクトをセットアップするにはどうすればよいですか (Java Config を使用して、注釈とメソッドを使用し、xml ファイルを回避します)。