首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Play Framework 和 Scala 管理用户身份验证(5)

使用 Play Framework 和 Scala 管理用户身份验证(5)

保护 REST API 调用 如果用户尝试对受保护的资源执行未验证的访问,应用程序会将请求重定向到索引页面(参见 “ ” 小节)。但要保护 REST API 端点,就无法接受此错误策略。REST API 错误响应必须拥有一个正确的                HTTP 状态,以及一个解释错误状况的负载,而不是将用户重定向到应用程序的页面。REST API                请求处理函数必须覆盖默认的错误策略。Silhouette 简化了这一任务:Silhouette                特征中混合的控制器会继承默认没有效果的错误处理函数。但可覆盖它们来基于控制器自定义错误处理。                    清单 22 显示了应用程序的 REST API 控制器。
清单 22. Rest API                控制器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class RestApi @Inject() (
  val messagesApi: MessagesApi,
  val env:Environment[User,CookieAuthenticator]) extends Silhouette[User,CookieAuthenticator] {

  def profile = SecuredAction.async { implicit request =>
    val json = Json.toJson(request.identity.profileFor(request.authenticator.loginInfo).get)
    val prunedJson = json.transform(
      (__ \ 'loginInfo).json.prune andThen
      (__ \ 'passordInfo).json.prune andThen
      (__ \ 'oauth1Info).json.prune)
    prunedJson.fold(
      _ => Future.successful(InternalServerError(Json.obj("error" -> Messages("error.profileError")))),
      js => Future.successful(Ok(js))
    )
  }

  override def onNotAuthenticated(request:RequestHeader) = {
    Some(Future.successful(Unauthorized(Json.obj("error" -> Messages("error.profileUnauth")))))
  }
}




REST API 包含一个安全请求处理函数,该函数返回一个包含登录用户的概况信息的 JSON 对象。在发送给调用方之前,该 JSON                对象被从敏感信息中删除。该类覆盖 onNonAuthenticated 方法,因此对 REST API                的匿名调用会返回一个响应,其中包含未授权的状态和一个包含错误消息的负载。
结束语 本教程介绍了如何设置一个基本但完整的 Play                应用程序,用以实现用户管理和身份验证。只需极少的局部更改(例如实现您自己的                DAO 来使用不同于 MongoDB                的持久性机制),您可针对您自己的项目调整该应用程序,而无需从头实现用户管理。期间我们用代码展示了                Play 提供的一些开发人员友好的特性,比如使用虚假应用程序来测试 DAO,自动将类转换为 JSON,以及自动绑定和验证表单。
您知道 Play 应用程序可在 Bluemix 上运行吗?查阅本系列的  ,其中将展示如何将这个身份验证应用程序部署到 IBM 云。
返回列表