我目前与 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.google.inject.internal.ConstructorBindingImpl.create(ConstructorBindingImpl.java:99) 在com.google.inject.internal.InjectorImpl.createUninitializedBinding(InjectorImpl.java:658
)
at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:882)
`
这是我用于依赖的build.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")
我的SecurityModule类:
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);
}
}
我的项目中提供了play.libs.F包。 Eclipse screenshot
我基本上试着想到的一切。现在我只想在路由配置文件中为我的一个地址启用简单的身份验证。 我按照这里发布的说明进行了跟踪:https://github.com/pac4j/play-pac4j。 任何帮助和提示将不胜感激。