인생 디벨로퍼

[Bank App] 7강 로그인 만들기 본문

Project/개인 Project - Bank App

[Bank App] 7강 로그인 만들기

뫄뫙뫄 2023. 6. 14. 15:42
728x90
반응형

form 태그 정리

POST (BODY)
key=value&key=value (x-www)

GET (URL)
?key=value&key=value (QueryString)

Get 요청과 Post 요청 모두 x-www-form-urlencoded 타입으로 데이터가 전달되지만 Get요청을 하게되면 주소에 데이터가 실려가기 때문에 흔히 QueryString이라고 부른다.


Controller

    @PostMapping("/login")
    public String login(LoginReqDto loginReqDto) {
        if (loginReqDto.getUsername() == null || loginReqDto.getUsername().isEmpty()) {
            throw new CustomException("username을 입력해주세요", HttpStatus.BAD_REQUEST);
        }
        if (loginReqDto.getPassword() == null || loginReqDto.getPassword().isEmpty()) {
            throw new CustomException("password를 입력해주세요", HttpStatus.BAD_REQUEST);
        }
        // User principal = userRepository.findByUsernameAndPassword(loginReqDto);
        User principal = new User();
        principal.setId(1);
        principal.setUsername("ssar");
        if (principal != null) {
            throw new CustomException("아이디 혹은 비번이 틀렸습니다", HttpStatus.BAD_REQUEST);
        }
        session.setAttribute("principal", principal);
        return "redirect:/";
    }

 

 @GetMapping({ "/", "/account" })
    public String main() {
    // throw new CustomException("인증되지 않았습니다", HttpStatus.UNAUTHORIZED);
        return "account/main";
    }

User객체를 login 메서드에서 강제로 만든 이유는 지금은 컨트롤러를 확인하는 것이기 때문에, User를 그냥 가짜로 만들어준 것

 


UserRepository 추상 메서드 만들기

public User findByUsernameAndPassword(LoginReqDto loginReqDto);

Controller 코드 수정

기존에 가짜로 만들어둔 코드 삭제.

principal이 null 일 경우, customException 에 잡힘

 

결과


헤더 수정

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


        <!DOCTYPE html>
        <html lang="en">

        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Bank 애플리케이션</title>
            <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
                integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD"
                crossorigin="anonymous">
            <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
                integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN"
                crossorigin="anonymous"></script>
            <link rel="stylesheet" href="../css/bank.css">
        </head>

        <body>
            <div class="my_form">
                <ul class="nav justify-content-center">
                    <c:choose>
                        <c:when test="${principal!=null}">
                            <li class="nav-item">
                                <a class="nav-link" href="/logout">로그아웃</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="/account">계좌목록(인증)</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="/account/saveForm">계좌생성(인증)</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="/account/transferForm">이체하기(인증)</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="/account/withdrawForm">출금하기(미인증)</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="/account/depositForm">입금하기(미인증)</a>
                            </li>
                        </c:when>
                 
                        <c:otherwise>
                            <li class="nav-item">
                                <a class="nav-link" href="/loginForm">로그인</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="/joinForm">회원가입</a>
                            </li>
                                <li class="nav-item">
                                <a class="nav-link" href="/account/withdrawForm">출금하기(미인증)</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="/account/depositForm">입금하기(미인증)</a>
                            </li>
                        </c:otherwise>
                    </c:choose>
                    
                </ul>
            </div>

헤더 수정 (네비게이션 세션 확인)

728x90
반응형