Scala 锁紧螺栓2限制功能只有一个可能的故障代码
这个问题可能有点哲学方面 我一直在我的游戏应用程序中使用Deadbolt 2(Scala),效果非常好 在查看(第47行)时,我注意到它将调用onAuthFailure,原因如下:Scala 锁紧螺栓2限制功能只有一个可能的故障代码,scala,playframework-2.1,deadbolt-2,Scala,Playframework 2.1,Deadbolt 2,这个问题可能有点哲学方面 我一直在我的游戏应用程序中使用Deadbolt 2(Scala),效果非常好 在查看(第47行)时,我注意到它将调用onAuthFailure,原因如下: 会话中没有用户(没有主题) 操作未指定任何角色 用户尝试的操作不具有一个或多个必需角色 在我的应用程序UI中,我希望为每个应用程序接收不同的状态代码,以便未登录的用户(条件1)将被重定向到登录页面,但条件3只需一个警告就可以更优雅地处理(因为它们无论如何都不会造成伤害,并且可能在具有“只读”访问权限时意外尝试编辑-可
我对scala有点陌生,因此对于如何最好地实现这些目标,我愿意接受更多的想法。我决定只添加代码来区分条件1和条件2或3,如下所示: 在MyDeadboltHandler中:
class MyDeadboltHandler(dynamicResourceHandler: Option[DynamicResourceHandler] = None) extends DeadboltHandler {
...
def onAuthFailure[A](request: Request[A]): Result = {
Logger.error("authentication failure")
val json = new JsonStatus("Failed to authenticate", -1).toJson.toString
if(noUserInSession(request)){
Results.Forbidden(json).withHeaders("Access-Control-Allow-Origin" -> "*")
}
else{
Results.Unauthorized (json).withHeaders("Access-Control-Allow-Origin" -> "*")
}
}
def noUserInSession(request:RequestHeader) = {
username(request) match {
case Some(u:String) => false
case _ => true
}
}
这对我来说效果很好,不会影响基本的Deadbolt-2功能。我遇到的一个问题是,身份验证和授权之间存在明显的区别。可以对用户进行身份验证(使用有效凭据登录),但可能未经授权(没有特定操作所需的角色)。如何在运行scala测试时模拟这些函数