• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

login_proc의 존재에 대한 간략한 설명입니다

24.02.25 14:07 작성 24.02.25 14:10 수정 조회수 108

0

정답부터 말하면 내부적인 정상 처리를 위해 일치시켜줘야 합니다.

이름이 logic_proc일 필요는 없고요 login 폼의 action이랑, 설정에서 등록해주는 loginProcessingUrl과 맞추기만 하면 됩니다. 저는 /login_perform으로 했는데요.

사용자가 로그인 폼에서 아이디와 비밀번호를 입력하면 UsernamePasswordAuthenticationFilter에서 주된 처리를 하게 되잖아요. 본격적인 처리가 들어가기 전에 이 처리를 할지 말지는 요청 Url와 HttpMethod를 검사해야 합니다. 이게 맞아야 해당 요청에 대한 정확한 필터를 작동시키니까요.

UsernamePasswordAuthenticationFilter의 실행 여부는 AbstractAuthenticationProcessingFilter가 합니다. doFilter에서 이뤄지죠? 다음 코드를 확인해봅시다.

바로 requiresAuthentication 함수를 디버깅해봅시다.

저matcher에 loginProcessingUrl에서 설정한 Url과 요청Url이 매치되는지 확인합니다. 해당 Url을 matcher에 설정할 때 시큐리티 내부적으로 POST를 이미 넣어줬습니다. 그렇기 때문에 로그인 폼에서 POST 방식을 지정하고 Action Url을 /login_perform 으로 설정하면 시큐리티에서 설정한 값과 동일하므로 이후의 로그인 절차가 진행될 수 있죠.

조금 더 첨언하자면 커스텀 로그인을 하는 순간 로그아웃도 반드시 커스텀해줘야 합니다. 서버 구동 시 설정 쪽에 관련 코드가 있어요. 디폴트 로그인이 아니면 디폴드 로그아웃도 설정 안 한다. 그래서 커스텀 로그인을 하면 DefaultLogoutPageGeneratingFilter가 설정되지 않아요. 그래서 강사님이 /logout 컨트롤러를 생성하신 겁니다.

 

다시 결론: 로그인 기능을 커스텀할 때 로그인 폼의 action url와 시큐리티에서 loginProcessingUrl은 일치시켜주기만 하면 된다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.27

안녕하세요, 인프런 AI 인턴입니다.

literate_t님, 스프링 시큐리티에서 로그인 프로세스를 커스텀하고자 할 때, 로그인 폼의 action URL과 시큐리티 설정에서 정의한 loginProcessingUrl은 일치시켜야 한다는 말씀이군요. 이는 UsernamePasswordAuthenticationFilter에서 요청 URL과 HttpMethod를 검사하여 인증 처리 여부를 결정하기 때문입니다. 이 과정은 AbstractAuthenticationProcessingFilter에서의 doFilter 메소드를 통해 수행되며, 정확한 매칭이 중요합니다.

요청이 인증을 필요로 할 경우 requiresAuthentication 함수를 통해 해당 URL이 로그인 처리 URL과 일치하는지 검사합니다. 여기서 시큐리티 설정 내에서 loginProcessingUrl에 지정된 URL이 POST 메소드와 함께 AntPathRequestMatcher를 통해 매치되는지 확인합니다. 로그인 폼에서 action/login_perform과 같이 지정하고 POST 방식을 사용함으로써 이후의 인증 과정이 진행될 수 있습니다.

또한 말씀하신 것처럼 커스텀 로그인을 할 때 로그아웃 절차 구현에도 주의를 기울여야 한다는 점도 유의할 필요가 있습니다. 스프링 시큐리티의 기본 로그인 설정을 사용하지 않는다면, 기본 로그아웃 설정 역시 적용되지 않으므로, 이를 개발자가 직접 구현해주어야 합니다.

성공적인 커스텀 로그인 구현을 위해 스프링 시큐리티 설정에 더 자세히 알고 싶으시면, 참고할 수 있는 문서 링크를 첨부드립니다.

Spring Boot Reference Documentation (로그인 관련 설명): https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#web.security

작성하신 내용이 다른 분들께도 도움이 될 수 있을 것 같습니다. 추가적인 질문이 있으시면 언제든지 질문해주세요.