Playframework 播放';未命中的默认安全身份验证筛选器

Playframework 播放';未命中的默认安全身份验证筛选器,playframework,playframework-2.0,playframework-2.2,Playframework,Playframework 2.0,Playframework 2.2,我试图通过扩展Security.Authenticator类来实现该剧的身份验证。我正在使用Play2.4.2(Damiya),这是我的代码 public class Secured extends Security.Authenticator{ public Secured() { Logger.info("In secured constructor...."); } @Override public String getUsername(

我试图通过扩展
Security.Authenticator
类来实现该剧的身份验证。我正在使用Play2.4.2(Damiya),这是我的代码

public class Secured extends Security.Authenticator{

    public Secured() {
        Logger.info("In secured constructor....");
    }

    @Override
    public String getUsername(Context context) {
        return context.session().get("loggedin_user");
    }

    @Override
    public Result onUnauthorized(Context context) {
        return redirect(routes.Application.index());
    }
}
我认为这个类扩展了安全性。Authenticator充当截获每个请求的J2EE过滤器。但我一次也没看到这本书。如果我误解了安全性的概念,请纠正我。验证器,让我知道它是如何工作的

我尝试在控制器中的一个操作方法上使用
@Security.Authenticated
,尽管抛出了以下编译时错误,但该类甚至没有编译

package Security does not exist Security.Authenitcated
我猜有些库丢失了,Play 2.4.2版本中的Play身份验证过程是否更改了?该安全类是否过滤所有检查身份验证的请求

更新:
将@Authenticated注释从
play.mvc.Security.Authenticated
保留在顶部后,控制器请求中的操作方法将在安全类中过滤。我注意到,每次通过安全类传递请求时,都会打印其构造函数日志消息。这是否意味着每次创建一个新的安全对象时?

是否导入了Security.authenticationplay.mvc.Security.Authenticator

import Security.Authentification;
我收到

Compilation error[package Security does not exist]

import play.mvc.Security.Authenticator;
一切正常。所以我很确定你做的不对

更新:“我注意到每次通过安全类传递请求时,都会打印构造函数日志消息。这是否意味着每次创建新的安全对象?”

对。我检查并验证每次传递请求时它都会创建新实例

 Authenticator authenticator = injector.instanceOf(configuration.value());
 String username = authenticator.getUsername(ctx);

我知道您已经找到了问题的答案,但如果您希望在
Security.Authenticator
实现中使用注入服务,您可能会使用该实现(因为Play 2.4.*使用DI),您将得到注入错误。这是游戏2.4.2的一个问题,并在新的游戏2.4.3版本中解决。我建议您升级您的Play版本。 这个问题可以在这里找到

例如,类似的内容将导致2.4.2中的错误,但不会导致2.4.3中的错误

@Singleton
public class SecurityGuard extends Security.Authenticator {

    String message;       

    @Inject
    Response response;  // injected play service

    @Override
    public String getUsername(Http.Context ctx) {
       // removed code
    }

    @Override
    public Result onUnauthorized(Http.Context ctx) {
        return response.unauthorized(message);
    }

}

是的,我之前使用的是play.mvc.Security.Authenticator,但当我使用@Security.Authenticated时,它在play 2.4.2中不起作用。更新了我的问题。我在Play 2.4.2中验证了此代码-它的工作方式与2.4.0上的工作方式完全相同。对我来说,只需导入此import Play.mvc.Security;注释@Security.Authenticated已生效。我在我的2.4.2项目中验证了你的安全类-它有效,因此我不太确定你还有什么问题。请检查我的更新。