S SmartDocs
Series: Java java 59 lines · Updated 2026-04-09

AuthController.java

Java/Baasid/src/main/java/com/baasid/controller/AuthController.java

package com.baasid.controller;

import com.baasid.dto.LoginRequest;
import com.baasid.dto.LoginResponse;
import com.baasid.service.AuthService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.headers.Header;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 認證相關 REST API,基底路徑 {@code /auth}。
 */
@RestController
@RequestMapping("/auth")
@Tag(name = "Auth", description = "用戶認證")
public class AuthController {

    private final AuthService authService;

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

    /**
     * 帳密登入:成功時回應 body 為基本使用者資訊,並於 Response Header {@code Authorization}
     * 回傳 {@code Bearer <JWT>} 供後續受保護端點使用。
     */
    @PostMapping("/login")
    @Operation(
            summary = "用戶登入",
            description = "登入系統並在 Response Header Authorization 取得 JWT token",
            responses = {
                    @ApiResponse(responseCode = "200", description = "成功",
                            headers = @Header(name = "Authorization", description = "JWT token",
                                    schema = @Schema(type = "string")),
                            content = @Content(schema = @Schema(implementation = LoginResponse.class))),
                    @ApiResponse(responseCode = "401", description = "帳號密碼錯誤",
                            content = @Content),
                    @ApiResponse(responseCode = "500", description = "系統錯誤",
                            content = @Content)
            }
    )
    public ResponseEntity<LoginResponse> login(@Valid @RequestBody LoginRequest request) {
        AuthService.LoginResult result = authService.login(request);

        return ResponseEntity.ok()
                .header("Authorization", "Bearer " + result.token())
                .body(result.body());
    }
}

Related articles