【问题标题】:Validate url parameter in the web socket Handshake - Play scala在网络套接字握手中验证 url 参数 - 播放 scala
【发布时间】:2015-10-28 08:41:43
【问题描述】:

我正在 Play Framework 2.3 中使用 scala 语言开发一种网络套接字方法。我有下面的代码来验证网络套接字中的用户。

   def speak = WebSocket.tryAcceptWithActor[JsValue, JsValue] { request =>
    Future.successful(request.session.get("user") match {
      case None    => Left(Forbidden)
      case Some(_) => Right(SpeakWs.props _)
    })
  }

但我想验证从 Web 套接字 URL 传递的数据库中的“session_id”。我的网络套接字调用如下所示。

ws://localhost:9000/speak?session_id=dsf76asdfasdeqrweqr34

我可以从 Web 套接字中的 URL 获取 session_id,如下所示。

   def speak = WebSocket.tryAcceptWithActor[JsValue, JsValue] { request =>
    var session_id = getSessionIdFromURL(request.uri)
    ...
  }

  def getSessionIdFromURL(url: String) = {
    var splitedPath: Array[String] = new Array[String](2)
    splitedPath = url.split("=")

    val session_id: String = splitedPath(1)
  }

如何验证数据库中的 session_id 并在其有效时进行握手?

(即)我如何验证 session_id 而不是“request.session.get("user") match”?

我是开发新手。所以我不知道该怎么做......

有人帮我做这个吗?

【问题讨论】:

    标签: mysql scala playframework websocket playframework-2.3


    【解决方案1】:

    试试

    def speak = WebSocket.tryAcceptWithActor[JsValue, JsValue] { request =>
        Future.successful(request.session.get("user") match {
          case None    => Left(Forbidden)
          case Some(_) => 
            validateSessionId(request.uri) match {
                case true => Right(SpeakWs.props _)
                case false => Left(Forbidden)
            }
        })
      }
    

    还添加了另一种方法来验证数据库中的会话 ID。

    def validateSessionId(uri: String): Boolean = {
        val sessionId = getSessionIdFromUrl(uri)
        databaseConnector.findSessionById(sessiondId).map {
            case true => true
            case false => false
        }
    }
    

    您还没有指定您使用的驱动程序,所以恐怕您必须自己弄清楚实现。如果您将这些详细信息放在您的问题中,我也可以提供帮助。

    您也不需要在 getSessionFromUrl 方法中初始化 splittedPath 变量,您可以执行类似下面的操作,编译器将推断类型:

    def getSessionIdFromURL(url: String) = {
        val splitedPath = url.split("=")
        splitedPath(1)
    }
    

    【讨论】:

    • 感谢您的回复。我试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多