0

Play 2.2.1 と Spring 4.0.1 を DI に使用しています。私は承認のためにデッドボルト Java バージョン 2.2-RC1 を使用しています。@SubjectPresent(handler = BaseDeadboltHandler.class) のような Deadbolt アノテーションが付けられたリクエスト ハンドラにアクセスするたびに、Deadbolt によって生成された例外が表示されます。

play.api.Application$$anon$1: Execution
exception[[NoSuchBeanDefinitionException: No qualifying bean of type
[be.objectify.deadbolt.java.actions.SubjectPresentAction] is defined]]

at play.api.Application$class.handleError(Application.scala:293)
~[play_2.10.jar:2.2.2-RC1]

at play.api.DefaultApplication.handleError(Application.scala:399)
[play_2.10.jar:2.2.2-RC1]

at
play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261)
[play_2.10.jar:2.2.2-RC1]

at
play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261)
[play_2.10.jar:2.2.2-RC1]

at scala.Option.map(Option.scala:145) [scala-library.jar:na]

at
play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2.applyOrElse(PlayDefaultUpstreamHandler.scala:261)
[play_2.10.jar:2.2.2-RC1]

Caused by:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No
qualifying bean of type
[be.objectify.deadbolt.java.actions.SubjectPresentAction] is defined

at
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:318)
~[spring-beans-4.0.1.RELEASE.jar:4.0.1.RELEASE]

at
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:985)
~[spring-context-4.0.1.RELEASE.jar:4.0.1.RELEASE]

at Global.getControllerInstance(Global.java:139) ~[classes/:na]

at
play.core.j.JavaGlobalSettingsAdapter.getControllerInstance(JavaGlobalSettingsAdapter.scala:46)
~[play_2.10.jar:2.2.2-RC1]

at play.core.j.JavaAction$$anonfun$8.apply(JavaAction.scala:80)
~[play_2.10.jar:2.2.2-RC1]

at play.core.j.JavaAction$$anonfun$8.apply(JavaAction.scala:77)
~[play_2.10.jar:2.2.2-RC1]

これはおそらく、Spring がその Bean コンテナを使用してデッドボルト クラスを管理しようとしているためです。これは回避できますか?デッドボルト アノテーションの Bean を検索しないように Spring に指示する方法はありますか?

4

1 に答える 1

0

ここでhttps://groups.google.com/forum/#!topic/play-framework/gV596rEE_MUの答えを見つけた Security.AuthenticatedAction で同様の問題がありました。最も簡単な方法は、dynamicAction を Bean として定義することです。

@Bean
public be.objectify.deadbolt.java.actions.DynamicAction dynamicAction(){
    return new be.objectify.deadbolt.java.actions.DynamicAction();
}

もちろん、複数の @DynamicAction がある場合、これは問題になる可能性があります。それが役に立てば幸い。

于 2015-03-17T14:42:30.743 に答える