有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    查看问题页面here,pac4j与Play 2.5不兼容。听起来pac4j在使用2.5中缺少了一些API。您在堆栈交易中看到的是Play 2.5删除了scala f.Functionf.Function0类等,而不是Java8 java.util.function.*类型。那上面有doco

    简而言之,要么等待pac4j 2.3.0的发布,要么返回到2.4