iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0

概述

今天將會實做在網頁系統中常見的 API 功能,Login 登入,這邊需要的引入 springboot 框架下的 AuthentictionManager 以及 SecurityContextHolder 等權限的模組。

Payload

首先在 payload 這個 package 中新增 LoginDto 的 class,同樣是用來與資料庫欄位做對應設定,在 User 資料表中有 username 帳號 (也有可能是 email)、密碼。所以設定的參數型態如下:

@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor

public class LoginDto {
	private String usernameOrEmail;
	private String password;

}

Service

在 service package 中新增一個 AuthService Interface class

public interface AuthService {

	String login(LoginDto loginDto);

}

在 service impl package 中新增 AuthServiceImpl.java 的 class

在登入的功能中需要使用 授權模組來進行安全性的執行

public class AuthServiceImpl implements AuthService{
		

		private AuthentictionManager authenticationManager;
		
		public AuthServiceImpl(AuthenticationManager authticationManager){
					this.authenticationManager = authenticationManager ;
			}

		@Override
		public String login(LoginDto loginDto) {
			Authentication authentication = authenticationManager.authenticate(new UsernamePasswordAuthticationToken(
					loginDto.getUsernameOrEmail(),loginDto.getPassword()));
				
		// 引入 spring framework 中的模組
			SecurityContextHolder.getContext().setAuthentication(authentication);
			return "User login successfully";

		}

}

Controller

在 controller 的 package 中新增 AuthController.java class

@ResetController
@RequestMapping("/api/auth")
public class AuthController{

		private AuthService authService;
		

public AuthController(AuthService authService){
		this.authService = authService;
}

// 主要負責處理 Login 的 REST API
@PostMapping("login")
@PostMapping(value={"/login","/signin"})    
public ResponseEntity<String> login(LoginDto loginDto){
		String response = authService.login(loginDto);
		return ResponseEntity.ok(response);
}

}

@PostMapping("login") 這個註釋同時也可以使用串接的方式,就是說如果 login 以及 signin 要使用同一個則可以用:

@PostMapping(value={"/login","/signin"})

API 測試

可以在 Postman 中使用:

http://localhost:8080/api/auth/login 來進行測試,選用 POST

{
		"usernameOrEmail" :"abcd@gmail.com",
		"password" : "aabbcc"
}

今天的紀錄就先到這裡,明天會講述關於註冊的 API 實作!

有任何問題歡迎留言一起討論~ 明天見~


上一篇
Day21 API Exception 例外處理 Part 2 Global
下一篇
Day23 Java Spring API 實作 - 註冊功能
系列文
Java Spring + Vue 甘苦學習路 前後端分離之 Blog 實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言