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.authentication或play.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项目中验证了你的安全类-它有效,因此我不太确定你还有什么问题。请检查我的更新。