Spring Security その１〜ログイン機能の実装

### はじめに
Spring Security を使用して、ログイン機能の実装です。

今回はデフォルトのログイン画面で、ユーザ認証もDBからは取得しません。
次回以降にDBから認証に必要な情報取得やカスタムログインページの作成をやる予定

## バージョン
・Spring Boot3
・SpringSecurity6


## プロジェクトの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555551/d1137472-3eee-c405-710c-0be2dcfffe25.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555551/32e30ee3-c4f4-d8bd-abce-1d8a3c38f0e2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555551/f038421f-ea13-455c-b727-760471a1d5c9.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555551/3858b757-8924-8e48-92ae-c82c47b94416.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555551/3a281fb3-80c0-e289-b32c-605dc83ebf20.png)

## application.properties の設定
（今回はDB接続は行いませんが、DBを使用する前提でプロジェクトは作成しているため、DBの設定が必要となる）
``` 
spring.jpa.database=POSTGRESQL
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=ユーザ名
spring.datasource.password=パスワード
logging.level.org.springframework=WARN
logging.level.jp.co.confrage.mapper.CustomerMapper=DEBUG
``` 
## SecurityConfig.javaを作成する
現時点では何もカスタムなしです
``` Java
package com.example.conf;

import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {


    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
        .formLogin()
        .and()
        .logout()
        .and()
        .authorizeHttpRequests(authz -> authz
                .requestMatchers(PathRequest.toStaticResources().atCommonLocations())
                .permitAll()
                .anyRequest().authenticated()
        );
        return http.build();
    }
}
```
## コントローラの作成
``` Java
package com.example.controller;

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

@Controller
@RequestMapping("/")
public class DemoController {

	@GetMapping("toppage")
	public String toppage() {
		return "toppage";
	}

}
```

## toppage（HTML）の作成
``` HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>TOPPAGE</h1>
</body>
</html>
```

## 起動して、toppageにアクセス
- 起動するとコンソールにログインパスワードが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555551/ad673787-7d3c-6fb4-21b7-ef0752cbe4a4.png)

- http://localhost:8080/toppage にアクセスするとデフォルトのログイン画面が表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555551/2fdbae33-e56d-7ed9-528f-cc2cd091bd6c.png)

- ユーザ名は「User」、パスワードはコンソールに出力されたパスワードを入力で認証が完了して、toppageが表示できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555551/ad8f5386-edc1-b22a-dd03-475670577598.png)

今回はここまで、次はテーブルから認証に必要な情報を取得しよう