Scalatra Basic Authentication для части приложения

Я пытаюсь понять, как написать приложение, в котором для определенных URL-адресов включена базовая аутентификация. Аутентифицированная часть не должна иметь аутентификацию на основе форм, а только логин по умолчанию, который я могу легко сделать с помощью Javascript/JQuery. Я видел несколько примеры, которые выглядят сложными, и когда я пытаюсь их использовать, многие вещи устаревают, и в целом кажется, что их много работы, чтобы получить пример кода даже для компиляции сейчас.

Итак, эти примеры по-прежнему являются лучшими из того, что может предложить Scalatra, или теперь есть более простой способ?

Я использую Scalatra (с scalatra-auth) версии 2.1.1.


person auramo    schedule 13.01.2013    source источник


Ответы (2)


Нашел более простой пример и заработал приведенный ниже код.

package mc.nulty

import org.scalatra.auth.strategy.BasicAuthStrategy.BasicAuthRequest
import org.scalatra._
import scalate.ScalateSupport

class McNultyServlet extends ScalatraServlet with ScalateSupport {

  get("/") {
    basicAuth
    <html>
      <body>
        <h1>Hello, world!</h1>
        Say <a href="hello-scalate">hello to Scalate</a>.
      </body>
    </html>
  }

  notFound {
    // remove content type in case it was set through an action
    contentType = null
    // Try to render a ScalateTemplate if no route matched
    findTemplate(requestPath) map { path =>
      contentType = "text/html"
      layoutTemplate(path)
    } orElse serveStaticResource() getOrElse resourceNotFound()
  }

  protected def basicAuth() = {
    val req = new BasicAuthRequest(request)

    def notAuthenticated() {
      response.setHeader("WWW-Authenticate", "Basic realm=\"%s\"" format "mc-nulty")
      halt(401, "Unauthenticated")
    }

    if(!req.providesAuth) {
      notAuthenticated
    }
    if(!req.isBasicAuth) {
      halt(400, "Bad Request")
    }
    val user = DAO.validateLoginPassword(req.username, req.password)
    if (user != null)
      response.setHeader("REMOTE_USER", "user.id")
    else {
      notAuthenticated
    }
    Option(user)
  }

  object DAO {
    def validateLoginPassword(username: String, password: String) : User = {
      if (username.equals("foo")) new User()
      else null
    }
  }
  class User(val id:String = "dummyid") {}
}
person auramo    schedule 13.01.2013