스프링 시큐리티

Ch03. 실전프로젝트(인증 프로세스 Form 인증 구현) - 사용자 DB 등록 및 PasswordEncoder

webmaster 2022. 1. 18. 15:45
728x90
    • Spring Security 5.0 이전에는 기본 PasswordEncoder 가 평문을 지원하는 NoOpPasswordEncoder(현재는 사용 X)
    • 암호화 포맷 : {id} encodedPasswordencodedPassword
      • bcryptnoop, pbkdf2, scrypt, sha256
      • 기본 포맷은 Bcrypt : {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG
    • 생성
      • PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder()
    • 인터페이스
      • encode(password)
        • 패스워드 암호화
      • matches(rawPassword, encodedPassword)
        • 패스워드 비교

구현하기

  • Entity 생성
    • 엔티티 생성
  • Dto 생성
    • Dto생성
  • Repository 생성
    • Repository
  • Service , ServiceInterface 생성
    • ServiceInterface
    • ServiceImpl
  • Password 생성해주는 Encoder 빈으로 등록
  • Controller 추가
    • 등록화면 이동, 등록 동작
  • html 
    • register.html
      • <html  xmlns:th="http:www.thymeleaf.org">
        <head th:replace="layout/header::userHead"></head>
        <body>
        <div th:replace="layout/top::header"></div>
        <body>
        
        <div class="container d-flex justify-content-center">
            <div style="width:700px; margin-top: 30px;">
                <form class="form-horizontal" th:action="@{/users}" method="post">
                    <div class="form-group">
                        <label for="username" class="col-sm-2 control-label">아이디</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control input-large" name="username" id="username" placeholder="username" required>
                        </div>
                    </div>
        
                    <div class="form-group">
                        <label for="password" class="col-sm-2 control-label">비밀번호</label>
                        <div class="col-sm-10">
                            <input type="password" class="form-control input-large" name="password" id="password" placeholder="Password" data-minlength="6" required>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="email" class="col-sm-2 control-label">이메일</label>
                        <div class="col-sm-10">
                            <input type="email" class="form-control input-large" name="email" id="email" placeholder="이메일" required>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="age" class="col-sm-2 control-label">나이</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control input-large" name="age" id="age" placeholder="나이" required>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="role" class="col-sm-2 control-label">권한</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control input-large" name="role" id="role" placeholder="권한" required>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-sm-offset-1 col-sm-10">
                            <button type="Submit" class="btn btn-dark btn-lg">가입하기</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
        </body>
        </html>
    • top을 li태그에 link추가

 

728x90