로그인 테스트

  • 화면에 로그인 버튼 추가하기 & 로그인 성공 시 사용자명 나타내기
  • 컨트롤러에서 사용자명 저장하여 화면으로 전달하기
  • DB 테이블 확인하기
  • 글쓰기로 권한 관리 확인

FrontEnd

index.mustache

  • 로그인 버튼

    1. {{#userName}}

      • mustache는 다른 언어와 같은 if문을 제공하지 않는다.
      • true / false 여부만 판단
      • mustache에 항상 최종 값을 넘겨줘야 한다.
      • userName이 있다면 userName을 노출하도록 구성
    2. a href="/logout"

      • 스프링 시큐리티에서 기본적으 제공하는 로그아웃 URL
      • 개발자가 별도로 URL에 해당하는 컨트롤러를 만들 필요가 없다.
      • SecurityConfig 클래스에서 URL을 변경할 순 있지만 기본 URL을 사용해도 충분하다.
    3. {{^userName}}

      • mustache에서 해당 값이 존재하지 않는 경우 ^를 사용
      • userName이 없다면 로그인 버튼을 노출하도록 구성
    4. a href="/oauth2/authorization/google"

      • 스프링 시큐리티에서 기본적으로 제공하는 로그인 URL
      • 로그아웃 URL과 마찬가지로 개발자가 별도의 컨트롤러를 생성할 필요가 없다.
    <h1>스프링 부트로 시작하는 웹 서비스 No. 3</h1>

    <div class="col-md-12">
        <div class="row">
            <div class="col-md-6">
                <a href="/posts/save" role="button" class="btn btn-primary">글 등록</a>
                {{#userName}}
                    Logged in as: <span id="user">{{userName}}</span>
                    <a href="/logout" class="btn btn-info active" role="button">Logout</a>
                {{/userName}}
                {{^userName}}
                    <a href="/oauth2/authorization/google" class="btn btn-success active" role="button">Google Login</a>
                    <a href="/oauth2/authorization/naver" class="btn btn-secondary active" role="button">Naver Login</a>
                {{/userName}}
            </div>
        </div>
        <!-- -->
    </div>

BackEnd

IndexController

  • 컨트롤러 수정
    1. (SessionUser) httpSession.getAttribute("user")
      • CustomOAuth2UserService에서 로그인 성공 시 세션에 SessionUser를 저장하도록 구성
      • 로그인 성공 시 httpSession.getAttribute("user")에서 값을 가져올 수 있다.
    2. if (user != null)
      • 세션에 저장된 값이 있을 때만 model에 userName으로 등록
      • 세션에 저장된 값이 있으면 model엔 아무런 값이 없는 상태이니 로그인 버튼이 보이게 된다.
@RequiredArgsConstructor
@Controller
public class IndexController {

    private final PostsService postsService;
    private final HttpSession httpSession;

    @GetMapping("/")
    public String index(Model model) {
        model.addAttribute("posts", postsService.findAllDesc());
        SessionUser user = (SessionUser) httpSession.getAttribute("user");

        if(user !=  null) {
            model.addAttribute("userName", user.getName());
        }
        return "index";
    }

    // save, update
}

OAuth2 Google 로그인 및 권한 테스트

화면 수정 확인

화면 수정 로그인 버튼 확인

OAuth2 Google 연동 확인

OAuth2 확인

로그인 확인

로그인 확인

DB 내에 로그인 확인

OAuth2 Google Login 확인

로그인 유저 Role 수정

로그인 유저 Role 'User'로 수정

User Role 'USER'로 변경 후 글 등록 테스트 확인

글 등록 확인

+ Recent posts