[스프링부트 게시판] 16. 스프링 시큐리티 체험해보기

2022. 5. 12. 18:20·🚗 Backend Toy Project/스프링 부트 게시판

📝 Spring Security

  • 이번 시간에는 스프링 시큐리티 라이브러리를 사용하여 로그인 기능을 수정해보도록 하겠습니다.
  • 스프링 시큐리티에 대한 보다 자세한 설명은 아래 링크에서 확인하실 수 있습니다.
 

스프링 부트 Spring Security

📝 스프링 시큐리티란? 스프링 시큐리티는 스프링 기반 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크입니다. 주로 서블릿 필터와 이들로 구성된 필터체인으

daegwonkim.tistory.com

  • 우선 pom.xml 파일에서 이전에 주석처리 해놓았던 시큐리티 라이브러리와 관련된 부분을 주석 해제해주었습니다.

pom.xml

  • 이후 UserApiController에 구현한 로그인 함수를 주석처리 한 뒤 프로젝트를 실행하여 결과를 확인해봅니다.

Result

  • 그럼 위와 같은 화면이 출력되는 것을 확인할 수 있습니다.
  • 이렇듯 스프링 시큐리티 라이브러리를 사용하면 해당 홈페이지의 어느 곳에 접근하던지 스프링 시큐리티가 가로채서 위 화면으로 이동하게 됩니다.
  • 위 화면에서 로그인하기 위해선 Username은 'user'로 Password는 서버를 실행할 때 콘솔창에 출력된 다음 구문을 그대로 복사하면 됩니다.

Console

  • 로그인에 성공하면 자동으로 세션이 생기게 됩니다.
  • 이제 header.jsp 파일을 수정해주겠습니다.
  • 우선 아래 태그 라이브러리를 구문을 header.jsp 파일의 위쪽에 추가해줍니다.
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
  • 이어서 바로 아래에 다음 구문을 작성해줍니다. 
<sec:authorize access="isAuthenticated()">
	<sec:authentication property="principal" var="principal"/>
</sec:authorize>
  • 해당 구문은 로그인이 되었는지 확인한 뒤, 해당 정보를 'principal'이라는 변수에 저장하여 가져오는 작업을 수행합니다.
  • 이후 아래와 같이 코드를 추가로 수정해줍니다.

header.jsp

  • 페이지를 새로고침하여 로그인 시 header 부분이 정상적으로 변경되는지 확인합니다.

Result


📝 Spring Security 로그인 페이지 커스터마이징

  • 다음으로 스프링 시큐리티 로그인 페이지를 간단히 커스터마이징 해보도록 하겠습니다.
  • 우선 주소 정리를 위해 UserController 클래스를 열고 다음과 같이 경로를 변경해주었습니다.

UserController

  • 여기서 /auth/... 경로는 인증이 되지 않은 사용자도 출입할 수 있는 경로를 의미합니다.
  • 이후 header.jsp 파일에 설정되어 있는 경로 역시 다음과 같이 수정해줍니다.

header.jsp

  • 해당 코드 아래에 작성되어 있는 로그인 이후의 구문은 인증된 사용자만이 접근할 수 있는 경로이므로 바꾸지 않은 것입니다.
  • 이러한 방식으로 나머지 파일들의 경로 또한 수정해주겠습니다.
  • UserApiController 클래스에 설정되어 있는 경로를 변경해주었습니다.

UserApiController

  • 다음으로는 UserService 클래스에 구현하였던 로그인 함수를 삭제해주었으며, UserRepository에 작성한 코드 또한 사용할 일이 없기 때문에 모두 지워주었습니다.
  • 이후 loginForm.jsp 파일의 코드를 다음과 같이 수정해주었습니다.

loginForm.jsp

  • 수정사항으로는 <form> 태그의 action 속성과 method 속성을 추가해주었으며, <button> 태그를 <form> 태그 안으로 집어넣어 주었습니다. 또한 <input> 태그의 name 속성을 추가해주었습니다.
  • 참고로 해당 파일에서는 user.js 파일과 더 이상 교류하지 않을 것이므로 <script> 태그를 지워주었습니다.
  • user.js 파일에서도 마찬가지로 로그인 기능을 구현하지 않아도 되므로 이전에 작성하였던 login 함수를 지워주었으며, 추가로 save 함수의 ajax 호출 경로를 알맞게 수정해주었습니다.

user.js

  • 마지막으로 패키지를 새로 생성한 뒤 설정 클래스를 만들고 다음과 같이 구현해줍니다.

SecurityConfig

  • 위 클래스는 스프링 시큐리티의 설정을 직접 관리하기 위한 파일로써 작동합니다.
  • configure 함수에 작성되어 있는 코드의 의미를 한 문장으로 말하자면 '/auth/...로부터 요청되는 경로는 모두 승인될 것이며 이외의 나머지 경로들에 대해서는 인증이 필요하다. 그러므로 인증이 되지 않은 사용자가 해당 경로에 접근하려 할 경우에는 로그인을 하기 위한 페이지를 출력시킨다.'로 정의할 수 있습니다.
  • 참고로 위 클래스에 작성되어 있는 3가지 어노테이션은 세트라고 봐도 무방하며 각각의 의미는 주석을 통해 확인할 수 있습니다.
  • 이후 프로젝트를 실행하여 잘 동작하는지 테스트해봅니다.

💡 알게 된 점

  • 스프링 시큐리티를 사용하여 로그인 기능 구현하는 방법
  • 스프링 시큐리티 설정 클래스 구현 방법

📌 Reference

  • https://www.youtube.com/@metacoding
 

GitHub - Daegwon-Kim/SpringBoot-JPA-Blog

Contribute to Daegwon-Kim/SpringBoot-JPA-Blog development by creating an account on GitHub.

github.com

저작자표시 (새창열림)

'🚗 Backend Toy Project > 스프링 부트 게시판' 카테고리의 다른 글

[스프링부트 게시판] 18. 게시글(추가, 상세보기, 삭제, 수정, 페이징)  (0) 2022.05.14
[스프링부트 게시판] 17. 비밀번호 해쉬 후 회원가입 및 로그인하기  (0) 2022.05.12
[스프링부트 게시판] 15. 로그인 기능 구현하기  (0) 2022.05.10
[스프링부트 게시판] 14. 회원가입 기능 구현하기  (0) 2022.05.07
[스프링부트 게시판] 13. 로그인, 회원가입 화면 만들기  (0) 2022.05.05
'🚗 Backend Toy Project/스프링 부트 게시판' 카테고리의 다른 글
  • [스프링부트 게시판] 18. 게시글(추가, 상세보기, 삭제, 수정, 페이징)
  • [스프링부트 게시판] 17. 비밀번호 해쉬 후 회원가입 및 로그인하기
  • [스프링부트 게시판] 15. 로그인 기능 구현하기
  • [스프링부트 게시판] 14. 회원가입 기능 구현하기
Baeg-won
Baeg-won
  • Baeg-won
    좋았다면 추억이고 나빴다면 경험이다.
    Baeg-won
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 🍃 Spring, Spring Boot
        • 스프링 프레임워크 기초
        • 스프링 핵심 원리 - 기본편
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편
        • 스프링 MVC
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리..
      • 🥑 Web Technoloy
      • 🚗 Backend Toy Project
        • 스프링 부트 게시판
        • Photogram
        • Baeg-won Clothing Gallery
      • 🥇 Problem Solving
        • Breadth-First Search
        • Depth-First Search
        • Backtracking
        • Simulation
        • Two-pointer
        • Binary Search
        • Greedy
        • Dynamic Programming
        • Minimum Spanning Tree
        • Dijkstra
        • Floyd warshall
      • ☕ Java
        • 명품 자바 에센셜
        • Applications
      • 🍦 JavaScript
        • JavaScript 기초
      • 🐧 Linux
        • 이것이 리눅스다(CentOS 8)
      • 📟 Database
        • 혼자 공부하는 SQL
      • 🧬 Data Structure
      • 🎬 HTML
      • 🎤 Tech Interview
      • 📌 etc
        • Unity 2D Raising Jelly Game
        • C++
        • 영어 쉐도잉
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Baeg-won
[스프링부트 게시판] 16. 스프링 시큐리티 체험해보기
상단으로

티스토리툴바