1

特定の URL に対して基本認証が有効になっているアプリを作成する方法を見つけようとしています。認証された部分には、フォームベースの認証は必要ありません。Javascript/JQuery から簡単に実行できるデフォルトのログインだけです。複雑に見えるいくつかの を見てきましたが、それらを使用しようとすると、多くのものが非推奨になり、一般に、サンプルコードをコンパイルするだけでも大変な作業になるようです。

これらの例は今でも Scalatra が提供する最高のものですか、それとももっと簡単な方法がありますか?

私は Scalatra (scalatra-auth 付き) バージョン 2.1.1 を使用しています。

4

2 に答える 2

3

簡単な例を見つけて、以下のコードが機能するようにしました。

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") {}
}
于 2013-01-13T12:46:05.150 に答える
1

現在、探している基本的な認証ケースをカバーする認証に関する Scalatra ガイドがあります。http://scalatra.org/2.2/guides/http/authentication.htmlを参照してください。

Scalatra の認証統合は、Scalatra 2.1.1 (使用している) とまもなくリリースされる Scalatra 2.2.0 の間で変更されていないはずなので、このガイドは引き続き有効です。

于 2013-02-03T14:55:46.503 に答える