你能把这个 Security.Authenticator 的例子转换成 scala 吗?
Can you convert this example of Security.Authenticator to scala?
这是 Play 中的身份验证实现示例:
package controllers;
import play.*;
import play.mvc.*;
import play.mvc.Http.*;
import models.*;
public class Secured extends Security.Authenticator {
@Override
public String getUsername(Context ctx) {
return ctx.session().get("email");
}
@Override
public Result onUnauthorized(Context ctx) {
return redirect(routes.Application.login());
}
}
但这是在 Java 中,我需要将其转换为 Scala。这是我尝试过的方法,但没有用。它无法找到重定向方法。
package controllers
import play.mvc.Security
import play.mvc.Http.Context
import play.mvc.Result
import play.mvc.Results.Redirect
class Secured extends Security.Authenticator {
override def getUsername(ctx: Context) : String = {
"username_placeholder"
}
override def onUnauthorized(ctx: Context) : Result = {
// Cannot find reference to redirect!
redirect(routes.Application.index())
}
}
redirect实际上是superclass中的一个静态方法。因此,我尝试使用 onUnauthorized def 为 Secured 创建一个伴生对象。但是那没有用。
您应该能够调用重定向,就好像 redirect
所在的 class 是一个对象:play.mvc.Results.redirect(...)
(假设您没有在其他地方寻找任何其他可能的重载。 )
这是 Play 中的身份验证实现示例:
package controllers;
import play.*;
import play.mvc.*;
import play.mvc.Http.*;
import models.*;
public class Secured extends Security.Authenticator {
@Override
public String getUsername(Context ctx) {
return ctx.session().get("email");
}
@Override
public Result onUnauthorized(Context ctx) {
return redirect(routes.Application.login());
}
}
但这是在 Java 中,我需要将其转换为 Scala。这是我尝试过的方法,但没有用。它无法找到重定向方法。
package controllers
import play.mvc.Security
import play.mvc.Http.Context
import play.mvc.Result
import play.mvc.Results.Redirect
class Secured extends Security.Authenticator {
override def getUsername(ctx: Context) : String = {
"username_placeholder"
}
override def onUnauthorized(ctx: Context) : Result = {
// Cannot find reference to redirect!
redirect(routes.Application.index())
}
}
redirect实际上是superclass中的一个静态方法。因此,我尝试使用 onUnauthorized def 为 Secured 创建一个伴生对象。但是那没有用。
您应该能够调用重定向,就好像 redirect
所在的 class 是一个对象:play.mvc.Results.redirect(...)
(假设您没有在其他地方寻找任何其他可能的重载。 )