login_proc의 존재에 대한 간략한 설명입니다
272
68 asked
정답부터 말하면 내부적인 정상 처리를 위해 일치시켜줘야 합니다.
이름이 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은 일치시켜주기만 하면 된다.
Answer 1
0
안녕하세요, 인프런 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
작성하신 내용이 다른 분들께도 도움이 될 수 있을 것 같습니다. 추가적인 질문이 있으시면 언제든지 질문해주세요.
시큐리티 공부 버전 질문
0
173
1
[해결 방법] MethodSecurityConfig.customMethodSecurityMetadataSource() 호출하지 않는 이슈
0
183
1
AbstractSecurityInterceptor.class.beforeInvocation()를 2번 실행하는 경우
0
172
1
강의 코드가 왜이렇게 뒤죽박죽인가요...
0
246
1
메인 페이지로 접속해도 login url로 리다이렉트가 되지 않습니다..
0
233
1
파라미터값이 넘어가지 않습니다 ....
0
372
1
security filterChain 설정 질문이 있습니다.
0
328
1
소스 부분 질문 드립니다.
0
206
2
섹션4 7번 강의 문제가 있는거 같네요.
0
342
2
파일이 수시로 이름이 바껴있네요 ㄷㄷ
0
302
1
HttpSessionSecurityContextRepository를 사용안하는 문제
0
553
2
error , exception 이 잘 안됩니다.
0
275
2
thymeleaf tag 질문합니다.
0
194
2
버전업하면서 deprecated된 것들이 너무많아요
0
476
1
spring security 패치 관련
0
435
1
모바일을 사용할때 토큰말고 세션
0
843
2
DB 연동한 인가 부분에 대한 질문입니다!
0
262
1
Ajax방식도 똑같이 Session방식을 사용하는건가요?
0
305
1
Config 파일 생성 시 질문이 있습니다.
0
223
1
강사님 몇일동안 구글 검색만 100개 했는데도 이유를 모르겠습니다..
1
427
2
403 에러 뜹니다.
0
809
2
top.html에 로그인 링크를 만들어서 로그인을 해봤습니다
0
275
2
안녕하세요. DB에 저장될 때 이해 안 가는 값이 있어서 질문드립니다!
0
186
1
안녕하세요. 익명 객체와 세션 관련 궁금증입니다.
0
288
1

