2016-07-31 13 views
0

背景:私は、UIを配信するためにAngularJS、spring-mvc、spring-restを利用するWebアプリケーションを持っています。私はElastic LBを使用してロードバランスを行う必要があります。ではなく、スティッキセッションを使用しています。リクエストはラウンドロビンです。私は、セッションストレージのためにgemfireでspring-sessionを使ってセッション複製を実装しました。これはうまくいく。spring-security-gemfireとspring-security-oauth2を混在させたときのトラブルセーブセッション

純粋に認証とuserInfoの受け渡しのために、OAuth2認証サーバー(と最終的に複数のOAuth2サーバー)と統合する必要があります。私はWebアプリケーション上で春の雲oauth2 @ EnableOAuth2Ssoを使用しようとし、いくつかのセッションのシリアル化の問題にぶつかりました。セッションにoauth2ClientContextを追加するだけで、セッションの保存中にClassCastExceptionの問題が発生したようです。

以下のサンプルをプルダウンしようとしましたが、特にUIとAuthserverがうまく機能しました。私はGemFireのサーバーにシリアライズしようとすると、ミックスに春のセッションを追加したとき
https://github.com/spring-guides/tut-spring-security-and-angular-js

しかし、私は正確に同じ問題に遭遇しました。以下はjava.lang.ClassCastException: cannot assign instance of org.springframework.beans.factory.support.StaticListableBeanFactory to field org.springframework.aop.scope.DefaultScopedObject.beanFactory of type org.springframework.beans.factory.config.ConfigurableBeanFactory in instance of org.springframework.aop.scope.DefaultScopedObject

がスタックトレース省略されています:ここで

は、スタックトレースのハイライトである

ERROR o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception 

org.springframework.dao.DataAccessResourceFailureException: remote server on machine(gemfire:21800:loner):57660:9d1f3438:gemfire: : While performing a remote put; nested exception is com.gemstone.gemfire.cache.client.ServerOperationException: remote server on machine(gemfire:21800:loner):57660:9d1f3438:gemfire: : While performing a remote put 
    at org.springframework.data.gemfire.GemfireCacheUtils.convertGemfireAccessException(GemfireCacheUtils.java:238) ~[spring-data-gemfire-1.7.4.RELEASE.jar:1.7.4.RELEASE] 
    at org.springframework.data.gemfire.GemfireAccessor.convertGemFireAccessException(GemfireAccessor.java:91) ~[spring-data-gemfire-1.7.4.RELEASE.jar:1.7.4.RELEASE] 
    at org.springframework.data.gemfire.GemfireTemplate.put(GemfireTemplate.java:190) ~[spring-data-gemfire-1.7.4.RELEASE.jar:1.7.4.RELEASE] 
    at org.springframework.session.data.gemfire.GemFireOperationsSessionRepository.save(GemFireOperationsSessionRepository.java:147) ~[spring-session-1.2.1.RELEASE.jar:na] 
    at org.springframework.session.data.gemfire.GemFireOperationsSessionRepository.save(GemFireOperationsSessionRepository.java:35) ~[spring-session-1.2.1.RELEASE.jar:na] 
    at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:244) ~[spring-session-1.2.1.RELEASE.jar:na] 
    at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$100(SessionRepositoryFilter.java:214) ~[spring-session-1.2.1.RELEASE.jar:na] 
    at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:167) ~[spring-session-1.2.1.RELEASE.jar:na] 
    at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:80) ~[spring-session-1.2.1.RELEASE.jar:na] 
    ... tomcat filter chain and spring filter stuff 
Caused by: com.gemstone.gemfire.cache.client.ServerOperationException: remote server on machine(gemfire:21800:loner):57660:9d1f3438:gemfire: : While performing a remote put 
    ... gemfire internal stuff 
    at org.springframework.data.gemfire.GemfireTemplate.put(GemfireTemplate.java:187) ~[spring-data-gemfire-1.7.4.RELEASE.jar:1.7.4.RELEASE] 
    ... 31 common frames omitted 
Caused by: java.lang.ClassCastException: cannot assign instance of org.springframework.beans.factory.support.StaticListableBeanFactory to field org.springframework.aop.scope.DefaultScopedObject.beanFactory of type org.springframework.beans.factory.config.ConfigurableBeanFactory in instance of org.springframework.aop.scope.DefaultScopedObject 
    at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2133) ~[na:1.7.0_80] 
    at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1305) ~[na:1.7.0_80] 
    ... java.io stuff 
    at org.springframework.aop.framework.AdvisedSupport.readObject(AdvisedSupport.java:557) ~[spring-aop-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at sun.reflect.GeneratedMethodAccessor224.invoke(Unknown Source) ~[na:na] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_80] 
    at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.7.0_80] 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1058) ~[na:1.7.0_80] 
    ... java.io stuff 
    at com.gemstone.gemfire.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2966) ~[gemfire-8.1.0.jar:na] 
    at com.gemstone.gemfire.DataSerializer.readObject(DataSerializer.java:3210) ~[gemfire-8.1.0.jar:na] 
    at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSessionAttributes.readObject(AbstractGemFireOperationsSessionRepository.java:800) ~[spring-session-1.2.1.RELEASE.jar:na] 
    at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSessionAttributes.fromDelta(AbstractGemFireOperationsSessionRepository.java:834) ~[spring-session-1.2.1.RELEASE.jar:na] 
    at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession.fromDelta(AbstractGemFireOperationsSessionRepository.java:589) ~[spring-session-1.2.1.RELEASE.jar:na] 
    at com.gemstone.gemfire.internal.cache.EntryEventImpl.processDeltaBytes(EntryEventImpl.java:1345) ~[gemfire-8.1.0.jar:na] 
    ... gemfire internal stuff 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.7.0_80] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.7.0_80] 
    at com.gemstone.gemfire.internal.cache.tier.sockets.AcceptorImpl$1$1.run(AcceptorImpl.java:577) ~[gemfire-8.1.0.jar:na] 
    ... 1 common frames omitted 

I見つけた最新のjarファイルの一部を更新するために私を励まし以下、https://jira.spring.io/browse/SPR-14117、バージョンは、春のブートバージョンが単純に後ろにあることを望んだが、それは助けに見えなかった。

バージョン情報:

spring-cloud-starter-parent: Brixton.SR4 spring-cloud-security: 1.1.2.RELEASE spring-core: 4.3.2.RELEASE spring-security-oauth2: 2.0.10.RELEASE spring-session: 1.2.1.RELEASE

私はいくつかのオプションと考えられてきました:GemFireの対のRedisを使用し、(困難なようだ)もはや使用ScopedProxyMode.INTERFACESへのOAuth2の枠組みを再配線を、全体のクライアントを書きます最初から(私はそれをやったことが...楽しいものではなかった)。ここで推奨されているように私はすでにRequestContextFilterを追加しました

FWIW:OAuth2ClientContext (spring-security-oauth2) not persisted in Redis when using spring-session and spring-cloud-security

誰がどんな指導を持っていますか?

答えて

0

これはあなたの問題に直接言えるのかどうかわかりませんが、私には同様の問題がありました。あなたと同じバージョンを持っていると思います。非常に多くのSpringプロジェクトがあるように見えます。彼らはお互いに追いつこうとするので、時には互換性の問題があるようです。私はここでRob Winchによって概説されている手順が私の問題を修正したことを発見しました - https://github.com/spring-projects/spring-session/issues/395

+0

ええ、私はブートアプリケーションとクラウドアプリケーションの両方の部分を試しました。どちらも役に立たなかった。最終的に私は時間の制約のためにジェムファイヤーをあきらめ、レディスに行った。今私は99の赤みの問題があり、宝石は1つではありません。 – qkerby

+0

私はあなたの答えを受け入れました。なぜなら、他の誰もやらなかったときにあなたは現れました。そして、あなたは全く話題だったからです。 – qkerby

関連する問題