<!-- xml 부분 -->
<security:form-login
login-page="/login"
authentication-success-handler-ref="로그인성공핸들러객체이름"
authentication-failure-handler-ref=""
authentication-failure-url="/실패url" />
form 로그인을 사용하는 xml 코드이다(이 부분은 보안상 생략한 부분이 많다. 아쉽지만 따로 찾아보시길 바란다).
(참고: csrf 설정은 보안에 중요한 부분이다. Spring Security 4 버전부터 csrf 설정이 디폴트로 변경됨에 따라, 3에서 4로 업그레이드하는 과정에서 이 부분에 에러가 생길 수 있다. 그 경우 위처럼 일단 disabled="true"로 설정을 하여 해결할 수 있긴 하지만, 권장되는 방법은 아니다. 나도 이후 수정하여 포스팅할 예정이다.)
이 부분은 나도 확실하지 않은 부분이다. 또한 이 객체를 사용하지 않은 프로젝트가 있을 수 있다. 사용하지 않았다면 넘어가자.
<!-- xml 부분 -->
<bean name="로그인성공핸들러" class="패키지.위치.로그인성공핸들러">
<property name="설정" value="/설정url"/>
</bean>
위 로그인성공핸들러에 해당하는 파일을 찾자. 나의 경우 java 파일이었다.
이 클래스에 @Component를 붙여 빈으로 등록해주고, 원하는 설정(property 부분)을 추가해주자.
내가 한 설정 부분은 보안상 구체적으로 언급하지 않겠다.
그리고 SecurityConfig.java에 이 로그인성공핸들러 객체를 의존주입해주면 완료!
(@Autowired private final 로그인성공핸들러 로그인성공핸들러; 를 추가!)
3.4. AuthenticationManagerBuilder 설정
개인적으로 가장 어려웠던 부분이다.
이 부분은 비록 개발이 아니라 수정을 하는 것일지라도,
AuthenticationManager와 AuthenticationProvider, UserDetailsService의 흐름과 역할을 알아야 수월하게 진행할 수 있다.
나의 경우, 해당 부분만 빠르고 공부하고 설정 수정에 들어갔는데, 지금 생각해보면 잘 한 행동인 것 같다.
해당되는 내용 강의는 30분도 안됐는데, 덕분에 덜 헤매며 많은 시간을 아껴 설정을 성공적으로 마무리할 수 있었다.
(혹시 궁금해하실 수도 있으니 적어두자면, 정수원님의 Spring Security 강의의 "스프링 시큐리티 주요 아키텍처 이해"에서 "7) 인증 관리자: AuthenticationManager"와 "8) 인증 처리자 - AuthenticationProvider" 각각의 앞 이론 부분만 들었다. 이 부분만 알아도 훨씬 할만 해진다. Security에 대한 기본적인 이해가 있다는 전제 하에 해당.)
<!-- xml 부분 -->
<security:authentication-manager>
<security:authentication-provider user-service-ref="jdbcUserService">
<security:password-encoder hash="bcrypt"/>
</security:authentication-provider>
</security:authentication-manager>
<security:jdbc-user-service id="jdbcUserService"
data-source-ref="dataSource"
users-by-username-query="쿼리"
authorities-by-username-query="쿼리"
/>
위 xml을 보면 두 부분으로 나뉘어진다. AuthenticationManager와 JdbaUserService를 각각 설정해주어야 하는 건지, 각각 알맞은 구현체는 어떻게 찾을지 난감했었다.
우선 나의 경우, jdbc-user-service 만 설정해주어도 되었다(잘 보면 authentication-manager 부분에서는, jdbcUserService를 주입하고, 인코딩 설정만 해주고 끝난다.).
(참고: 아무래도 jdbc는 많이 쓰지 않기 때문에 알맞은 구현체를 찾기 어려웠다. UserDetailsService 구현 객체를 다 뒤져봐야하나 심란해하던 차에, 좋은 자료를 찾았다! Spring Security에서 Jdbc를 사용하는 방법에 대해 자세하게 적힌 좋은 글이다. 링크를 남겨두니 자세히 보고 싶은 분은 참고하길 바란다.)