iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0
Software Development

我的SpringBoot絕學:7+2個專案,從新手變專家系列 第 11

Day11 第五個Spring Boot專案:會員註冊登入系統(1)不要再用csrf().disable()

  • 分享至 

  • xImage
  •  

為何不要用csrf().disable()

因為這種寫法已經過時了,接下來的教學會採用符合6.1新規範的格式。

  • 古早的教學寫法

雖然程式可以運作,但是有紅線,寫著csrf() is deprecated since version 6.1 and marked for removal。

  • 我們的寫法

沒有紅線

黃線代表寫法有改良的空間。

不採用改良的原因是:我認為對於新手來說cors → cors.disable()比較好,可以通用於其他情形。
例如:我們要設定.authorizeHttpRequests,就能舉一反三,推理出

.authorizeHttpRequests(authorizeHttpRequests -> authorizeHttpRequests.一些設定)

剩餘的Spring Security部分將在Day14繼續。

介紹

下一個專案是會員註冊登入系統,使用者可以透過網頁註冊和登入,我們會使用Spring Security框架來驗證會員的email和密碼,正確才能登入,也會使用Spring Security管控頁面的讀取權限,在沒登入時無法進入特定的頁面。

在這個專案不會像之前一樣,一次提供完整的Controller、Service、Repository。

我認為Spring Security對於初學者來說是有點困難的內容,希望能夠把步驟拆解成大家都能理解的程度,讓大家能夠循序漸進。

專案架構

User

欄位名稱 資料形態 說明
id Long 唯一的id
email String 電子郵件
password String 密碼

功能

路徑 HTTP request method 說明
/ GET 顯示首頁
/register GET 註冊頁面
/register POST 新增用戶
/users GET 顯示註冊用戶的email列表
/login GET 登入頁面
/login POST 處理登入程序
/logout GET 登出

建立專案

按照以下設定建立專案,下載並解壓縮。

創立資料庫並連接

接下來我們要新增專案使用的資料庫。

我們在開始功能表找到「MySQL Client (MariaDB (x64))」打開,輸入密碼後按Enter,輸入以下指令創建資料庫

CREATE DATABASE user_db;

接著關閉視窗,開啟專案,修改application.properties

spring.application.name=user_registration_system

spring.datasource.url=jdbc:mariadb://localhost:3306/user_db
spring.datasource.username=root
spring.datasource.password=填入密碼
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

現在啟動專案,看資料庫是否能夠成功連接,如果沒有錯誤發生就成功了。

Entity

我們來設定User,安裝專案架構的內容做。

自訂自動建立的資料表名稱為users

//User.java

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

unique代表這個欄位的內容不能重複,nullable表示不能留空

unique的設定讓一個email只能申請一個會員帳號

 @Column(unique = true, nullable = false)

當留空時會出現錯誤,message是提供給前端顯示的訊息

    @NotEmpty(message = "email為必填項目")
    @Email(message = "請填入正確的Email")
    private String email;
    @Column(nullable = false)
    @NotEmpty(message = "密碼為必填項目")
    private String password;

    public User() {

    }

    public User(Long id, String email, String password) {
        this.id = id;
        this.email = email;
        this.password = password;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

啟動專案,看看資料表有沒有建立。

Repository

//UserRepository.java

public interface UserRepository extends JpaRepository<User, Long> {
}

建立AuthController和首頁

AuthController的目的是用來完成註冊和登入的功能,專案完成後,在未登入只能讀取AuthController的內容,其餘Controller未登入不準進。

我們幫AuthController弄個基礎的架構,讓人能夠進入首頁。

//AuthController.java

@Controller
public class AuthController {
		//顯示首頁
    @GetMapping("/")
    public String index() {
        return "index";
    }
}

index.html用來進入註冊和登入表單,目前只有前往首頁和註冊頁面(還沒做,點了會顯示404)的功能。

//index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>User Registration System</title>
</head>
<body>
<div>
    <div>
        <a th:href="@{/}">Home</a>
        <a th:href="@{/register}">Register</a>
    </div>
    <div>

    </div>

</div>
</body>
</html>

啟動專案,試著進入首頁http://localhost:8080/ ,可以看到網頁上只有Home和Register。


上一篇
Day10 第四個Spring Boot專案:客戶管理系統(3)前端與測試
下一篇
Day12 第五個Spring Boot專案:會員註冊登入系統(2)註冊
系列文
我的SpringBoot絕學:7+2個專案,從新手變專家31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言