Java 在Play框架中获取绝对URL并确保社交安全
我正在我的游戏项目中使用安全社交。我正在尝试使用我自己的电子邮件进行注册 此处描述了如何: 我的问题是,我在尝试在模板中创建绝对URL时出错: @securesocial.Controller.routes.Registration.signUp(mailToken).absoluteURL(IdentityProvider.sslEnabled) 下面是错误日志: [错误]播放-无法调用操作,最终出现错误: java.lang.Runt imeException:中没有可用的HTTP上下文 在这里[错误]应用程序- !@6j0al12dk-内部服务器错误,用于(POST)[/signup]> play.api.Application$$anon$1:执行异常[[RuntimeException: 此处没有可用的HTTP上下文。]] 在play.api.Application$class.handleError(Application.scala:293)~[play_ 2.10.jar:2.2.3] play.api.DefaultApplication.handleError(Application.scala:399)[play_ 2.10.jar:2.2.3] 在play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun $applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264) [播放2.10.jar:2.2.3]Java 在Play框架中获取绝对URL并确保社交安全,java,http,playframework-2.0,absolute-path,securesocial,Java,Http,Playframework 2.0,Absolute Path,Securesocial,我正在我的游戏项目中使用安全社交。我正在尝试使用我自己的电子邮件进行注册 此处描述了如何: 我的问题是,我在尝试在模板中创建绝对URL时出错: @securesocial.Controller.routes.Registration.signUp(mailToken).absoluteURL(IdentityProvider.sslEnabled) 下面是错误日志: [错误]播放-无法调用操作,最终出现错误: java.lang.Runt imeException:中没有可用的HTTP上下文
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun
at scala.Option.map(Option.scala:145) [scala-library.jar:na]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrE
$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264)
[播放2.10.jar:2.2.3]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun
at scala.Option.map(Option.scala:145) [scala-library.jar:na]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrE
lse(PlayDefaultUpstreamHandler.scala:264)[play_2.10.jar:2.2.3]导致
by:java.lang.RuntimeException:没有可用的HTTP上下文
从这里。
在play.mvc.Http$Context.current(Http.java:30)~[play_2.10.jar:2.2.3]
在play.mvc.Http$Context$Implicit.ctx(Http.java:196)~[play_2.10.jar:2.2.3]
在play.core.j.PlayMagicForJava$.requestHeader(TemplateMagicForJava.scal
a:56)~[play-java_2.10.jar:2.2.3]
在views.html.custom.mails.signUpEmail$.apply(signUpEmail.template.scala
:42)~[classes/:na]
在plugins.NekViews.getSignUpEmail(NekViews.scala:100)~[classes/:na]
在securesocial.core.providers.utils.Mailer$.sendSignUpEmail(Mailer.scal
a:49)~[securesocial_2.10-2.1.3.jar:2.1.3][info]应用程序-
[securesocial]卸载的身份提供程序:userpass[info]应用程序
-[securesocial]已卸载密码哈希器bcrypt[info]播放-关闭应用程序
默认Akka系统
有人知道错误是什么吗?您的模板需要隐式请求,这是获取绝对URL所必需的
@(/*template's parameters*/)(implicit request: RequestHeader)
此请求必须在呈现模板的方法中可用。我有一个非常类似的错误,如果不是相同的,可能您还在项目中混合了一些java代码 您必须在控制器(在本例中为自定义视图控制器)中创建java上下文,以便视图使用它 例如: Scala帮助器创建java上下文
object JavaContext {
import play.mvc.Http
import play.core.j.JavaHelpers
def withContext[Status](block: => Status)(implicit header: RequestHeader): Status = {
try {
Http.Context.current.set(JavaHelpers.createJavaContext(header))
block
}
finally {
Http.Context.current.remove()
}
}
}
用法:
class CustomSecureSocialTemplates(env:RuntimeEnvironment[_]) extends ViewTemplates.Default(env:RuntimeEnvironment[_])
{
override def getLoginPage(form: Form[(String, String)],
msg: Option[String] = None)(implicit request: RequestHeader, lang: Lang): Html = {
JavaContext.withContext {
views.html.security.login(form,msg)
}
}
//...
}
资料来源: