728x90
스프링 시큐리티가 로그인 인증을 하는 로직은 다음과 같다.
Http 요청이 들어오고 필터를 거처 마지막에 SecurityContextHolder에 들어간다. 세션에 들어갈 수 있는 오브젝트는 스프링 시큐리티에서 정해져있다.
그것이 위의 있는 Authentication 이다. 이 안에는 유저 정보가 들어있고 유저 정보가 있는 오브젝트 타입은 UserDetail이다. 위 6번에서 알 수 있듯, UserDetatils는 인터페이스로 제공이 된다. 이제 저 인터페이스를 구현해보자
PrincipalDetails로 UserDetails 인터페이스를 구현한다.
이제 구현한 프린시펄디테일을 어떻게 세션에 넣는 걸까? 방법은 간단하다. 간편한 서비스가 이미 구현되어 있기 때문에 우린 그 인터페이스를 구현하여 사용하면 된다. 위에도 나와있는 UserDetailService 이다.
그런데 이런 의문이 든다. 아니... 로그인이 되면 얘네들이 자동으로 실행되는건가? 따로 설정하지 않아도? 정답은 그렇다이다. 스프링시큐리티가 간편한 이유다.
.loginProcessingUrl("/login") // login 주소가 호출되면 시큐리티가 낚아채서 대신 로그인을 진행해준다.
스프링 시큐리티는 지장한 링크로 로그인 요청이 들어오면 자동으로 IoC에 등록된 위 서비스가 실행이된다. 자동으로 유저 네임까지 가져와 loadUserByUsername을 동작시킨다. 그리고 null이 아니면, 즉 있는 유저이면 프린시플디테일을 새로 만들어내고 이후 자동으로 세션에 투입되어 로그인이 완료된다.
*오류가 날 수 있는 요소
// 만약 유저네임이 아니라 다르게 ex) ID 로 받으려면, usernameParameter("ID") 로 바꿔줘야함
'Dev > Spring Boot' 카테고리의 다른 글
Spring Boot 외부 파일 경로 설정 (2) | 2024.01.09 |
---|---|
Spring Boot - Java 동적 페이지 웹 크롤링 Selenium (0) | 2023.12.25 |
우분투에서 MySql 실행법 (0) | 2023.07.30 |
Spring Security - configure, WebSecurityConfigurerAdapter를 사용하여 권한 체크 (0) | 2023.07.23 |
Spring Boot - 카카오 로그인 인가 받기 (0) | 2023.02.20 |