質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

2372閲覧

spring security CSRF対策のログイン画面について

mk222222

総合スコア59

Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2018/11/06 00:24

編集2018/11/06 04:12

表題についてですが
spring securityの実装をしてセッションタイムアウトしたら
セッションタイムアウトしました。ログイン画面へ移動します。
というページを挟むことができました。

ここからが本題ですが、ログイン画面へ移動した後、
情報を入力、submitするとタイムアウト画面が表示されてしまいます。
ちなみにタイムアウト時間は5秒で設定しています。

自分で少し調べたら、CSRF対策のトークンをsessionに保管している
からこの現象が起きるらしいです
https://qiita.com/opengl-8080/items/3720ed415c2df26251a7 参照

なのでログイン画面でトークンを取得してhidennで送る処理が必要らしいのですが
ajaxとかやったことないので全然わかりませんでした、またjspのカスタムタグを
用いたトークンの取得はネット上にあったのですが、thymeleafを用いたトークンを取得
するやり方が見つけきれませんでした。

まとめると
・thymeleaf+ajax(javascript)でトークンを取得する記述の仕方が知りたい
・取得したあとコントローラ(webのConfiger?)になにか追記する必要があるのか

上記二点についてよろしくお願いいたします。

追記
アドバイス参考に実装してみましたがうまくいきませんでした。
ボタン押下時にjsでトークンをhiddenにセットして一応ajaxsendでRequestHeaderにもトークンをセットしました。
デバッグして確かにトークンをセットしてるのを確認しましたが、
やはりタイムアウト後にログインするとセッションタイムアウトページに飛んじゃいます。
うーん。難しいずらね。

login.html <meta name="_csrf_header" th:content="${_csrf.headerName}" /> <meta name="_csrf" th:content="${_csrf.token}" /> <input type="hidden" id="csrfToken" th:name="${_csrf.headerName}" /> <input type="button" id="loginButton" value="ログイン" />
login.js // ログイン時csrfトークン取得 $(function() { $('#loginButton').on('click', function() { var headerName =$("meta[name='_csrf_header']").attr("content"); var tokenValue =$("meta[name='_csrf']").attr("content"); $(document).ajaxSend(function(e,xhr,options){ xhr.setRequestHeader(headerName,tokenValue); }); $('#csrfToken').val(tokenValue); $('#form').submit(); }); });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Spring BootでSpring SecurityのCSRF対策を使う

の、画面を用いない処理の場合 に書かれていますね。

http://brissyu.blogspot.com/2015/09/11spring-boot-web-ajax-csrf.html

を参考にされてはいかがでしょうか。

投稿2018/11/06 00:38

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mk222222

2018/11/06 01:39

ありがとうございます!参考にやってみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問