📝 Spring Security
- 이번 시간에는 스프링 시큐리티 라이브러리를 사용하여 로그인 기능을 수정해보도록 하겠습니다.
- 스프링 시큐리티에 대한 보다 자세한 설명은 아래 링크에서 확인하실 수 있습니다.
- 우선 pom.xml 파일에서 이전에 주석처리 해놓았던 시큐리티 라이브러리와 관련된 부분을 주석 해제해주었습니다.
- 이후 UserApiController에 구현한 로그인 함수를 주석처리 한 뒤 프로젝트를 실행하여 결과를 확인해봅니다.
- 그럼 위와 같은 화면이 출력되는 것을 확인할 수 있습니다.
- 이렇듯 스프링 시큐리티 라이브러리를 사용하면 해당 홈페이지의 어느 곳에 접근하던지 스프링 시큐리티가 가로채서 위 화면으로 이동하게 됩니다.
- 위 화면에서 로그인하기 위해선 Username은 'user'로 Password는 서버를 실행할 때 콘솔창에 출력된 다음 구문을 그대로 복사하면 됩니다.
- 로그인에 성공하면 자동으로 세션이 생기게 됩니다.
- 이제 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 부분이 정상적으로 변경되는지 확인합니다.
📝 Spring Security 로그인 페이지 커스터마이징
- 다음으로 스프링 시큐리티 로그인 페이지를 간단히 커스터마이징 해보도록 하겠습니다.
- 우선 주소 정리를 위해 UserController 클래스를 열고 다음과 같이 경로를 변경해주었습니다.
- 여기서 /auth/... 경로는 인증이 되지 않은 사용자도 출입할 수 있는 경로를 의미합니다.
- 이후 header.jsp 파일에 설정되어 있는 경로 역시 다음과 같이 수정해줍니다.
- 해당 코드 아래에 작성되어 있는 로그인 이후의 구문은 인증된 사용자만이 접근할 수 있는 경로이므로 바꾸지 않은 것입니다.
- 이러한 방식으로 나머지 파일들의 경로 또한 수정해주겠습니다.
- UserApiController 클래스에 설정되어 있는 경로를 변경해주었습니다.
- 다음으로는 UserService 클래스에 구현하였던 로그인 함수를 삭제해주었으며, UserRepository에 작성한 코드 또한 사용할 일이 없기 때문에 모두 지워주었습니다.
- 이후 loginForm.jsp 파일의 코드를 다음과 같이 수정해주었습니다.
- 수정사항으로는 <form> 태그의 action 속성과 method 속성을 추가해주었으며, <button> 태그를 <form> 태그 안으로 집어넣어 주었습니다. 또한 <input> 태그의 name 속성을 추가해주었습니다.
- 참고로 해당 파일에서는 user.js 파일과 더 이상 교류하지 않을 것이므로 <script> 태그를 지워주었습니다.
- user.js 파일에서도 마찬가지로 로그인 기능을 구현하지 않아도 되므로 이전에 작성하였던 login 함수를 지워주었으며, 추가로 save 함수의 ajax 호출 경로를 알맞게 수정해주었습니다.
- 마지막으로 패키지를 새로 생성한 뒤 설정 클래스를 만들고 다음과 같이 구현해줍니다.
- 위 클래스는 스프링 시큐리티의 설정을 직접 관리하기 위한 파일로써 작동합니다.
- configure 함수에 작성되어 있는 코드의 의미를 한 문장으로 말하자면 '/auth/...로부터 요청되는 경로는 모두 승인될 것이며 이외의 나머지 경로들에 대해서는 인증이 필요하다. 그러므로 인증이 되지 않은 사용자가 해당 경로에 접근하려 할 경우에는 로그인을 하기 위한 페이지를 출력시킨다.'로 정의할 수 있습니다.
- 참고로 위 클래스에 작성되어 있는 3가지 어노테이션은 세트라고 봐도 무방하며 각각의 의미는 주석을 통해 확인할 수 있습니다.
- 이후 프로젝트를 실행하여 잘 동작하는지 테스트해봅니다.
💡 알게 된 점
- 스프링 시큐리티를 사용하여 로그인 기능 구현하는 방법
- 스프링 시큐리티 설정 클래스 구현 방법
📌 Reference
'🚗 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 |