[SpringBoot]はCSR方式で応答する.sendRedirect()を使用する際の注意点
2618 ワード
問題が発生
ローカルテスト時に全く問題のないログイン機能がAWSに配備されると動作しなくなります.クライアントは、404も応答もないエラー・ログをチェックし、Postmanを使用してテストを行うと、ドメイン127.0.0.1が要求され、ローカル・ホストに接続できないという不思議なエラーが発生しました.サーバをローカルで実行し、Postmanにリクエストを送信した場合、ローカルリクエストによってエラーは発生しません.
Redisは問題だと思いますので、コントローラのテストをしました.結果はよかったです.ログでログインが正常に行われていることを確認し、ローカル環境にリクエストを送信する部分があると思い、Spring Securityのログインプロセスを再確認し、不審な部分を発見しました.即座に応答する.sendRedirectです
の原因となる // 문제의 코드
@Component
class CustomAuthenticationFailureHandler : AuthenticationFailureHandler{
override fun onAuthenticationFailure(
request: HttpServletRequest?,
response: HttpServletResponse?,
exception: AuthenticationException?
) {
println(exception?.message)
response?.sendRedirect("http://localhost:8080/api/login/fail")
}
}
Spring Securityが提供するログインポリシーは、ログインの実装時に使用されるため、フィルタレベルで要求をJWTトークンにマウントしてクライアントに送信する必要がありますが、Brite Req、Resは不明なため、トークンを返すコントローラを作成して応答します.sendRedirect()で生成されたトークンをクエリーに入れ、コントローラとして再起動します.問題はsendRedirectメソッドがクライアントにリダイレクトアドレスを送信し、サーバを再要求する方法で動作することです.
すなわち、サーバ内のリクエスト処理コントローラに直接送信するのではなく、クライアントからリクエストを受信して再送信するため、localhostは、EC 2サーバではなくクライアントのドメインを表すため、リクエストはローカルに送信される.
解決する
最終的にlocalhostセクションをEC 2サーバのIPアドレスに変更することで問題を解決します.この問題では、いろいろな方法を試してみましたが、最終的にはある程度、もっと勉強する必要があると思います.
Reference
この問題について([SpringBoot]はCSR方式で応答する.sendRedirect()を使用する際の注意点), 我々は、より多くの情報をここで見つけました
https://velog.io/@tkppp-dev/SpringBoot-CSR-방식에서response.sendRedirect-사용시-유의점
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
// 문제의 코드
@Component
class CustomAuthenticationFailureHandler : AuthenticationFailureHandler{
override fun onAuthenticationFailure(
request: HttpServletRequest?,
response: HttpServletResponse?,
exception: AuthenticationException?
) {
println(exception?.message)
response?.sendRedirect("http://localhost:8080/api/login/fail")
}
}
Spring Securityが提供するログインポリシーは、ログインの実装時に使用されるため、フィルタレベルで要求をJWTトークンにマウントしてクライアントに送信する必要がありますが、Brite Req、Resは不明なため、トークンを返すコントローラを作成して応答します.sendRedirect()で生成されたトークンをクエリーに入れ、コントローラとして再起動します.問題はsendRedirectメソッドがクライアントにリダイレクトアドレスを送信し、サーバを再要求する方法で動作することです.すなわち、サーバ内のリクエスト処理コントローラに直接送信するのではなく、クライアントからリクエストを受信して再送信するため、localhostは、EC 2サーバではなくクライアントのドメインを表すため、リクエストはローカルに送信される.
解決する
最終的にlocalhostセクションをEC 2サーバのIPアドレスに変更することで問題を解決します.この問題では、いろいろな方法を試してみましたが、最終的にはある程度、もっと勉強する必要があると思います.
Reference
この問題について([SpringBoot]はCSR方式で応答する.sendRedirect()を使用する際の注意点), 我々は、より多くの情報をここで見つけました
https://velog.io/@tkppp-dev/SpringBoot-CSR-방식에서response.sendRedirect-사용시-유의점
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([SpringBoot]はCSR方式で応答する.sendRedirect()を使用する際の注意点), 我々は、より多くの情報をここで見つけました https://velog.io/@tkppp-dev/SpringBoot-CSR-방식에서response.sendRedirect-사용시-유의점テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol