Используйте следующий класс при реализации в Java @Security.Authenticated(Secured.class)
и getUsername
, onUnauthorized
методы в Secured.java
File. Но как сделать то же самое в Scala?Как обеспечить API, в Scala
0
A
ответ
1
Я сделал это в Play Framework проекта с использованием Secured
признака:
package controllers
import play.api.mvc._
trait Secured {
/**
* Retrieve the connected user login.
*/
private def username(request: RequestHeader) = request.session.get("login")
/**
* Redirect to login if the user in not authorized.
*/
private def onUnauthorized(request: RequestHeader) = Results.Redirect(routes.Application.login)
/**
* Action for authenticated users.
*/
def IsAuthenticated(f: => String => Request[AnyContent] => Result) = Security.Authenticated(username, onUnauthorized) {
user =>
Action(request => f(user)(request))
}
}
Application
выше контроллер аутентификации:
package controllers
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
import models._
import views._
object Application extends Controller {
val loginForm = Form(
tuple(
"login" -> text,
"password" -> text
) verifying("Invalid user or password", result => result match {
case (login, password) => User.authenticate(login, password).isDefined
})
)
/**
* Login page.
*/
def login = Action { implicit request =>
Ok(html.login(loginForm))
}
/**
* Handle login form submission.
*/
def authenticate = Action { implicit request =>
loginForm.bindFromRequest.fold(
formWithErrors => BadRequest(html.login(formWithErrors)),
user => Redirect(routes.Home.index()).withSession("login" -> user._1)
)
}
/**
* Logout and clean the session.
*/
def logout = Action {
Redirect(routes.Home.index()).withNewSession.flashing(
"success" -> "You've been logged out"
)
}
}
Затем пример защищенного контроллера страницы:
package controllers
import play.api.mvc._
import models._
import views._
import play.api.Logger
object MyPage extends Controller with Secured {
def index() = IsAuthenticated { username => implicit request =>
Ok(
html.mypage(
User.findByUsername(username)
)
)
}
}
User
- дело класс, который просто загружает данные из БД с помощью анорма. Наконец, связанная часть routes
:
# Authentication
GET /login controllers.Application.login()
POST /login controllers.Application.authenticate()
GET /logout controllers.Application.logout()
# MyPage
GET /mypage controllers.MyPage.index()
Есть два HTML шаблоны, указанные выше: login.scala.html
и mypage.scala.html
, но я не показывать их здесь.
Смежные вопросы
- 1. Map.getOrElse Scala - как обеспечить функцию по умолчанию
- 2. Как обеспечить SSL для API?
- 3. REST API: как обеспечить атомарность?
- 4. Обеспечить класс в notnull в Scala?
- 5. scala: обеспечить неизменный тип в закрытии
- 6. Как обеспечить регистрацию api в библиотеке
- 7. Как обеспечить специализированные реализации общих методов в Scala?
- 8. Как обеспечить, чтобы ресурс был закрыт для понимания в Scala
- 9. Как обеспечить привязку контекста к шаблону в Scala?
- 10. Как обеспечить, чтобы параметры типа были разными в Scala?
- 11. Как обеспечить Api для вашей угловой директивы?
- 12. Как обеспечить безопасность api с проверкой подлинности
- 13. Как обеспечить обратную совместимость API IPC
- 14. Apache Спарк Scala API: ReduceByKeyAndWindow в Scala
- 15. как обеспечить доступ к веб-интерфейсам API?
- 16. Как обеспечить асинхронный API RESTful, связанный с синхронным API
- 17. Как обеспечить Java-интерфейс для моего кода Scala?
- 18. Как обеспечить отдых api с помощью api-key amazon?
- 19. как использовать scala api документ?
- 20. Использование java.time API в scala
- 21. scala api document в REPL
- 22. Тип API класса в Scala
- 23. API векторизации Scala
- 24. Test API REST SCALA
- 25. Как обеспечить маршрут для текущего пользователя в REST API?
- 26. Как обеспечить мой Restful api, созданный в игровой структуре
- 27. Как обеспечить согласованность данных в REST API pagination
- 28. Как обеспечить сервер AW2 EC2 через REST API в C#?
- 29. Как обеспечить целостность данных в разбитом на страницы REST API?
- 30. Как обеспечить прогрессивную аудиопотоку с прогрессивной загрузкой в Box Api