你能把这个 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(...)(假设您没有在其他地方寻找任何其他可能的重载。 )