스프링 시큐리티 로그인 처리(커스텀 로그인, csrf토큰)

Hwawon_2·2022년 5월 8일
0

커스텀 로그인 페이지를 써 보겠습니다.
기존 로그인 페이지는 너무 다지인이 단순해 테스트 이상으로 쓰기는 어렵습니다.
먼저 security-context.xml내부의 security:form의 속성을 변경해줍니다.

그리고 CommonController에 새롭게 /customLogin을 주소로 하는 메서드를 만들고
에러로 접근했는지 로그앙수 상태로 접근했는지 구분하도록 사전세팅 합니다.

views에는 customLogin.jsp를 준비합니다. 이 페이지는 어떻데 이 페이지오게 되었는지와, 로그인시 사용할 폼을 제공합니다.

실행보면

로그인을 하고 로그아웃후 (쿠키삭제후)
다시 로그인 페이지로 돌아가면

토큰 값이 계속 바뀌는걸 확인할 수 있다.

(csrf는 cross-site request forgery공격이라고 불리며, csrf검증로직이 없는 사이트는 form이나 img 태그 내부의 링크설정을 곧이곧대로 받아 처리하기 때문에 악의적으로 공격을 할 수 있게 됩니다.
scrf 토큰은 매번 value값이 바뀌고, hidden으로 포함되어 들아가기 때문에 공격자 입장에서는 고정된 쿼리문만 전송해서는 더이상 명령이 작동하지 않고 매번바뀌는 csrf토큰값을 그때그때 찍어서 맞춰야 사실상 완전방어가 됩니다. )

콘솔창을 확인해 보면
admin 페이지로 접속시

admin으로 로그인

member 페이지로 접속시 member로 로그인

로그인을 해보면 제대로 로그인시 제대로된 페이지가 나오고 아이디 비밀번호를 잘못 입력하면 에러페이지가 나옵니다.

다만, 권한검증 등의 로직이 확실하게 처리되지는 않습니다.

이제 로그인 성공을 처리해보도록 해보겠습니다.
AuthenticationSuccessHandler를 이용해서 처리합니다.
com.ict.security에 먼저 CustomLoginSuccessHandler를 생성하고
AuthenticationSuccessHandler 인터페이스를 구현합니다.

오버라이딩 하는 onAuthenticationSuccess 메서드는 로그인 성공시 실행하는 로직들을 작성해줍니다.
(return구문도 각 if마다 붙여주세요. 안붙여주면 리아디렉트가 중복 호출됨)

이제 기존 로그인 처리 로직을 커스텀 처리로직으로 바꿔 적용하기 위해 security-context.xml 내용을 바꿔줍니다.

(앞으로는 다른 로직을 커스텀 작성시
1. 커스텀 로직 작성
2. security-context.xml내부에 bean 생성
3. 태그 적용순으로 진행하면 됩니다. )

실행하면


접근 계정에 따라 로그인이 다르게 처리 잘되는것을 볼수 있습니다.

profile
코딩 일기장

0개의 댓글