Vaadinアプリケーションプロジェクトで、spring-security-SAML拡張機能を統合したいと思います。SpringSecurity拡張機能のページからソースコードをダウンロードしました。手動に基づいて、mvnパッケージを使用して拡張機能をパッケージ化し、mvndeployコマンドを使用してローカルのMavenリポジトリにデプロイしました。すべてがうまくいきます。コンパイルされた拡張機能がMavenリポジトリに表示されました。そこで、次のような依存関係としてプロジェクトpom.xmlファイルに含めました。
<dependency>
<groupId>org.springframework.security.extensions</groupId>
<artifactId>spring-security-saml2-core</artifactId>
<version>1.0.0-RC1-SNAPSHOT</version>
</dependency>
その後、mavenプロジェクトを更新し、maven依存関係ディレクトリ内にspring-security-saml2-core-1.0.0-RC1-SNAPSHOT.jarを見つけました(MavenでEclipse IDEを使用しています)。次に私がしたことは、appLicationContext.xmlファイルの編集でした。applicationContext.xmlファイルはweb.xmlに含まれています。そこで、appLicationContext.xmlファイルに以下の行を追加しました。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="org.springframework.security.saml"/>
<security:http entry-point-ref="samlEntryPoint">
<security:intercept-url pattern="/*" access="IS_AUTHENTICATED_FULLY"/>
<security:custom-filter before="FIRST" ref="metadataGeneratorFilter"/>
<security:custom-filter after="BASIC_AUTH_FILTER" ref="samlFilter"/>
</security:http>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="samlAuthenticationProvider"/>
</security:authentication-manager>
<bean id="samlAuthenticationProvider" class="org.springframework.security.saml.SAMLAuthenticationProvider">
</bean>
<bean id="samlEntryPoint" class="org.springframework.security.saml.SAMLEntryPoint">
<property name="defaultProfileOptions">
<bean class="org.springframework.security.saml.websso.WebSSOProfileOptions">
<property name="includeScoping" value="false"/>
</bean>
</property>
</bean>
<bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter">
<constructor-arg>
<bean class="org.springframework.security.saml.metadata.MetadataGenerator"/>
</constructor-arg>
</bean>
ファイルにこのような変更を加えた後、プロジェクトをwarアーカイブにコンパイルし、glassfishサーバーにアップロードしようとしました。しかし、エラーが発生しました。
Error occurred during deployment: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'org.springframework.security.authentication.ProviderManager#0':
Cannot create inner bean '(inner bean)' of type [org.springframework.security.config.authentication.AuthenticationManagerFactoryBean] while setting bean property 'parent'; nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name '(inner bean)':
FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'org.springframework.security.authenticationManager': Cannot resolve reference to bean 'samlAuthenticationProvider' while setting bean property 'providers' with key [0]; nested exception is org.springframework.beans.factory.
私はそのような問題があるが異なるライブラリを持ついくつかのトピックを見つけました。誰も私の問題を解決するのを手伝ってくれませんでした。org.springframework.security.saml.SAMLAuthenticationProviderがwarアーカイブで見つからないか解決できなかったようです。しかし、手動で確認したところ、WEB-INF/libフォルダーspring-security-saml2-core-1.0.0-RC1-SNAPSHOT.jarで見つかりました。また、jarアーカイブ内をチェックして、SAMLAuthenticationProvider.classを見つけました。誰かが私の問題を解決するのを手伝ってくれますか?たぶん、Springセキュリティとsaml拡張の経験がある人がいるでしょう。