ワークフローを正しく理解していないと思います。Apache Shiro と Stormpath を使用して Scala で Web サービスを作成しています。私のユーザー認証プロセスは次のようになります。
1) POST リクエストからユーザー データを取得し、Stormpath で確認して、問題がなければページにリダイレクトします。
pathPrefix("api") {
path("login") {
post {
AuthToken.fromRequest { (token: AuthToken) =>
stormpathAuth(token) { subj =>
log.info("Subj {}", subj.getPrincipal.toString)
redirect("/some/page", StatusCodes.Found)
}
}
}
}
ログで、Shiro は私に Stormpath アカウントを持つ正しいサブジェクトを返しました。次に、サブジェクトを抽出して、コードで使用します。
pathPrefix("some") {
loggedInUser { subject =>
path("page") {
get {
complete {
html.render(Page.model)
}
}
} ..... other routes
loggedInUser
ディレクティブは件名を抽出し、それが認証されているかどうかを確認する必要があります。それ以外の場合は、ログイン フォームにリダイレクトします。SubjectUtils.getSubject.getPrincipal
問題は、ログに正しいアカウントが表示されているにもかかわらず、常にログインフォームにリダイレクトされることです。
更新しました
実際、Spray は Akka の上に構築されています。getSubject
したがって、問題は現在 ThreadLocal 環境に依存している実装の背後にあると思います。Shiro + Akka のトピックを検索しましたが、役立つ情報は見つかりませんでした。