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

Опитвам се да разбера как да напиша приложение, което има активирано основно удостоверяване за определени URL адреси. Удостоверената част не трябва да има удостоверяване, базирано на формуляр, а само влизане по подразбиране, което мога да направя лесно от Javascript/JQuery. Виждал съм няколко примери, които изглеждат сложни и когато се опитам да ги използвам, много от нещата са отхвърлени и като цяло изглеждат много работа, за да получите примерния код дори за компилиране сега.

Така че тези примери все още ли са най-доброто, което Скалатра може да предложи, или сега има по-прост начин?

Използвам 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="/bghello-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

Вече има ръководство на Scalatra за удостоверяване, което обхваща основния случай на удостоверяване, който търсите. Вижте http://scalatra.org/2.2/guides/http/authentication.html

Интеграциите за удостоверяване на Scalatra не трябва да са се променяли между Scalatra 2.1.1 (която използвате) и Scalatra 2.2.0, която скоро ще бъде пусната, така че ръководството все още трябва да е валидно за вас.

person futurechimp    schedule 03.02.2013