본문 바로가기
dev/Spring-security

[Spring] Spring Security 대략적인 흐름

by dev_Step 2022. 8. 6.

<security-intercept-url> 설정 후  access 등급이 있는 경우 Login화면으로 변경되며
로그인 성공시 바로
INFO : com.secu.web.SecurityController -  ONLY MEMBER 호출
접속시도-> 기본 Login 화면 -> SecurityController

+ error-page="" 설정으로 권한이 없는 아이디로 접속한 경우 바로
INFO : com.secu.web.CommonController - access Denied  출력됨

+ error-page 대신 ref="" 하여 AccessDeinedHandler 추가해줄경우
접속시도->Login->권한이 없는 경우 CustomAccessDeniedHandler (Redirect)-> CommonController(Redirect한곳)



======================================
security-context.xml login-page 설정후에
(권한없으면)
<로그인 실패(패스워드 틀릴경우)> 
URI 접속시도 -> 지정한 Login-page =/customLogin -> customLogin.jsp 이동 
즉 CommonController의 /customLogin을 거쳐간다.
customLogin.jsp 에서 로그인을 실패할경우 
authentication-failure-handler-ref 를 따로 설정하지 않는이상 
다시 /customLogin 요청을 하게 된다, 이때 error가 null이 아니므로 msg를
가지고 온다.


<로그인 성공 success-ref="" 설정시>
URI 접속시도 -> 지정한 Login-page =/customLogin -> customLogin.jsp
-> CustomLoginSuccessHandler(ref) -> CustomLoginSuccessHandler 에서 지정한 곳으로 redirect


========================================
logout 처리 부터 하면됨
로그인화면 -> customLoginSuccessHandler (에서 Redirect 이동) -> 
member.jsp 로 이동됨 
<handler 없을경우>
logout 누르면 -> CommonController 에서 /customLogout 처리 후
-> /customLogin 으로 redirect 진행

<handler 있을경우>
logout 누르면 -> CustomLogoutSuccessHandler 에서 -> 지정한 곳으로
redirect 된다. 

================================================
JDBC 연동 후에는
로그인시에 -> JDBC 설정한 user-by-username-query,  authentication-by-username-query
를 통해서 ID,PWD확인 후에 성공하면 CustomLoginSuccessHandler 을 거치고
실패할경우 다시 /customLogin이 호출된다.

==================================================

PasswardEncoder 설정이 되어있을경우
login을 시도하면
CustomNoPasswordEncoder(PasswordEncoder)로 이동을 하고 -> matches() 를 통해
패스워드와 암호화된 패스워드를 확인하고 -> 일치할경우 CustomLoginSuccessHandler 호출
-> 그렇지않을 경우 CommonController(/customLogin)을 호출한다.,

==================================================
사용자 정의 DB를 설정한 후 

로그인실시 -> CustomUserDetailsService의 loadUserByUsername(String username) 호출 ->
로그인 성공시 -> CustomLoginSuccessHandler 호출 후 내부에 따라 흐름
로그인 실패시 -> 다시 CommonController의 /customLogin 호출


로그인 실시 -> CustomUserDetailsService( loadUserByUsername() 을 통해서 
DB에서 저장된 user의 Id, pwd, auth등을 호출함 mapper에 정의한대로
 이렇게 가지고온 내용을 UserDetail 객체로 만든후 
-> PasswordEncoder 의 matches() 함수를 통해 
내가 입력한 비밀번호 rawPassword와 가지고온 encodedPassword를 비교함
이떄 일치하면 로그인 안되면 로그인 실패