java playpac4j和Play 2.5:@requireAuthentication注释导致stacktrace
我目前遇到了play-pac4j库与play Framework 2.5相结合的问题
注释:
@RequiresAuthentication(clientName = "FacebookClient")
在我的控制器中,方法导致以下堆栈跟踪:
`
java.lang.NoClassDefFoundError: play/libs/F$Function
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getDeclaredConstructors(Class.java:2020)
at com.google.inject.spi.InjectionPoint.forConstructorOf(InjectionPoint.java:245)
at com.google.inject.internal.ConstructorBindingImpl.create(ConstructorBindingImpl.java:99)
at com.google.inject.internal.InjectorImpl.createUninitializedBinding(InjectorImpl.java:658)
at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:882)
at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805)
at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282)
at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214)
Caused by: java.lang.ClassNotFoundException: play.libs.F$Function
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getDeclaredConstructors(Class.java:2020)
at com.google.inject.spi.InjectionPoint.forConstructorOf(InjectionPoint.java:245)
at
com。谷歌。注射内部的ConstructorBindingImpl。创建(ConstructorBindingImpl.java:99) 在com上。谷歌。注射内部的注射剂。createUninitializedBinding(InjectorImpl.java:658
)
at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:882)
`
这是我身体的碎片。我用于依赖项的sbt:
libraryDependencies ++= Seq(
"org.pac4j" % "play-pac4j" % "2.1.0",
"org.pac4j" % "pac4j" % "1.8.7",
"org.pac4j" % "pac4j-http" % "1.8.7",
"org.pac4j" % "pac4j-cas" % "1.8.7",
"org.pac4j" % "pac4j-openid" % "1.8.7",
"org.pac4j" % "pac4j-oauth" % "1.8.7",
"org.pac4j" % "pac4j-saml" % "1.8.7",
"org.pac4j" % "pac4j-oidc" % "1.8.7",
"org.pac4j" % "pac4j-gae" % "1.8.7",
"org.pac4j" % "pac4j-jwt" % "1.8.7",
"org.pac4j" % "pac4j-ldap" % "1.8.7",
"org.pac4j" % "pac4j-sql" % "1.8.7",
"org.pac4j" % "pac4j-mongo" % "1.8.7",
"org.pac4j" % "pac4j-stormpath" % "1.8.7")
我的安全模块类:
public class SecurityModule extends AbstractModule {
protected void configure() {
FacebookClient facebookClient = new FacebookClient("KEY", "SECRET_KEY");
Clients clients = new Clients("http://localhost:9000/callback",facebookClient);
Config config = new Config(clients);
config.addAuthorizer("admin",new RequireAnyRoleAuthorizer("ROLE_ADMIN"));
bind(Config.class).toInstance(config);
}
}
打包游戏。libs。F在我的项目中可用。 Eclipse screenshot
我基本上会尝试我想到的一切。现在我只想在路由配置文件中为我的一个地址启用facebook的简单身份验证。 我是按照这里发布的指示来做的:https://github.com/pac4j/play-pac4j。 任何帮助和小费都将不胜感激
# 1 楼答案
查看问题页面here,pac4j与Play 2.5不兼容。听起来pac4j在使用2.5中缺少了一些API。您在堆栈交易中看到的是Play 2.5删除了scala
f.Function
、f.Function0
类等,而不是Java8java.util.function.*
类型。那上面有doco简而言之,要么等待pac4j 2.3.0的发布,要么返回到2.4