SpringBootでRESTログイン

なかなか要点が掴めなかったSpringBootのRESTログインがなんとなくわかったので書いてみる。

必要なものなどを交えて書きますが、RESTでSpringBootが動いていることを前提にしています。

java : 1.8.0_111

maven : 3.3.9

SpringBoot : v1.4.3.RELEASE

pom.xmlにSpringSecurityを追加する

spring-boot-starter-securityを追加してログイン用ライブラリを読み込みます。

これがないとログインクラス作れません。

 

UserDetailsの実装

ログインユーザのエンティティにorg.springframework.security.core.userdetails.UserDetailsを実装します。

この後に実装するUserDetailsSerciceに必要になります。

is〜〜は今回説明を省きます。

 

UserDetailsServiceの実装

ここでは、ユーザテーブルからユーザ名をキーにSELECTをして、UserDtailsを返却します。

パスワードのチェックはSpringSecurityがやってくれるのでユーザ名での検索だけでOKです。

見つからなかったら UsernameNotFoundExceptionをスローしましょう。

 

GlobalAuthenticaionConfigの実装

GlobalAuthenticationConfigを実装することでSpringSecurityにどのUserDetailsServiceを使うかを教えてあげましょう。

これがないと、認証クラスを特定できません。

@ConfigurationをつけておくとSpringBootが勝手に拾ってくれるのでクラスを定義するだけでOKです。

 

SecurityConfigの実装

SecurityConfigでログインとCSRFが必要なURLと必要じゃないURLを切り分けます。

今回は、ログインURLがログイン・CSRFが不要なURLとして指定しています。

「*」が使えるので、ある程度は汎用性が効くはず。

 

LoginServiceの実装

今回の肝となるLoginServiceです。

ここで使うAuthenticationManagerがリクエストでPOSTしてきたユーザパスワードと、DBからSELECTしたユーザパスワードをチェックします。

チェックするときにはSpringSecurityがSaltして比較してるっぽいので、

POSTデータとDBはこの前に一致するようにしておく必要があります。

つまり

DBではハッシュ化したパスワードを保存して、リクエストでは平文パスワードを送っている場合、このチェックをする前にリクエストをハッシュ化しておく必要があります。

 

ログインコントローラの実装

最後にログインコントローラを実装します。

ここではログインサービスの設定と、CSRFトークンの生成をしています。

MVC的な観点ではログインCSRFもログインサービスで生成してあげた方がいいですね。

 

 

以上!

これでcurlを叩くと、新しいCSRFトークンとログインOK!のレスポンスが受け取れるはずです!

自前でやるのに比べていろいろとやること多い&だいたい最初に躓くポイントなので挫折してしまいがちですが、やることを理解すればそんなに難しくはないですね。

むしろユーザデータ作るほうがちょっとめんどいかも・・・w

 

Leave a Reply

Your email address will not be published. Required fields are marked *