SpringBoot で BASIC認証やってみた

Java

今回はセキュリティ関連の記事です。

ログイン機能の実装記事も今後書こうと思っているので、その前段としてBASIC認証をSpringBootでやってみたいと思います。

いや、これめちゃんこ簡単でびっくりしました。

では、やっていきたいと思います。

手順は以下の通り

1:dependencyの追加

2:application.propertiesの修正

3:リクエストハンドラの作成

以上の3ステップです。

では、早速やってきます

1:dependencyの追加

pom.xmlに次のdependencyたちを追加します。

<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.0</version>
		</dependency>

		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

特筆すべきは、以下のdependencyです。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

上記をpom.xmlに追加することでSpringSecurityのAutoConfigureが有効になり
デフォルトで、以下の設定がされる

・インメモリのAutenticationManagerが作成され、ユーザ名がuserであるユーザが作成される

・/css/** , /js/**, /images/**, **/favicon.icoが認可対象外になる

・上記以外のパスに対してはBASIC認証をかける

・SpringSecutiryが提供するHSTS, XSS, CSRF、キャッシュ無効化といったHTTPのセキュリティ強化機能が有効になる

これだけで、BASIC認証が有効になるのはすごい!
パスワードは起動時にログ出力される

これらを変更するにはapplication.propertiesに
spring.security.user.name=任意のユーザ名
spring.security.user.password=任意のパスワード
で変更できる!

それが次のステップになります。

2:application.propertiesの修正

こんな感じです。

spring.security.user.name=soloware
spring.security.user.password=solowarePW

これで、ユーザIDに「soloware」、パスワードに「solowarePW」と入力すれば、BASIC認証に成功します。

3:リクエストハンドラの作成

最後に、リクエストハンドラを作成します。

こんな感じです。

package com.soloware.security.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MainController {

    @RequestMapping("/")
    public String index(){
        return "index";
    }
}

/のパスでアクセスしたらindex.htmlを返します。

以上で、完了です!簡単すぎません?!

では、本当にBASIC認証ができているか!確認します。

「http://localhost:8080/」にアクセスしてみます

Usernameに「soloware」、Passwordに「solowarePW」と入力しSign inを押すと

無事にログインできました!

もし、正しくないユーザIDとパスワードを入力した場合、こうなります。

完璧ですね!

ちなみに、ログインが成功した後に違うブラウザでログイン後のサイトにアクセスしたらどうなるのか確認してみたいと思います。

まずは、Chromeでログインします。

注目すべきは、Cookieに入っているJSESSIONIDです。

ログインしてみます。

BASIC認証フォーム画面にアクセスした時のIDとログイン後で値が更新されているのがわかります。

ログインした状態で、NEXTアンカーをクリックし次の画面に行ってみます。

同じ、セッションIDですね!

BASIC認証をかけるかどうかは、おそらくこのセッションIDをみて決めているんだと思います。このセッションIDの生存期間は、ブラウザに依存するのかSpringSecurityの方でアクティブ期間を決めているのかは、不明です。暇があったら調べてみるのもあり。

では、ログインした状態で、異なるブラウザでログイン後にNEXTアンカーをクリックした時のURLである「http://localhost:8080/next」を叩いてみましょう。

Safariで試しました!すると

はい、BASIC認証フォーム画面に戻されました。セッションIDをみてみると

Chromeのものとは違いますね。やはりこのセッションIDをみてログインしているかどうかを判定しているっぽいです。

あ、ちなみに自分でセッションIDの有効期限なんかを操作することも、Spring Securityで実現できます!

これは次回の記事で紹介しようと思います!

では、今回はこの辺で!BYE!

タイトルとURLをコピーしました