순서는 form 인증 방식과 거의 흡사하다.
Filter 에서 요청 받고 -> autehnticationManager가 인증정보 넘기고 ->AuthenticationProvider -> authentication manager -> filter ->handler
Ajax를 사용하기위해 조건을 걸어두자.
1.특정URL로 요청하고 요청방식이 Ajax이면 필터 작동
2.AbstractAuthenticationProcessingFilter상속
3.Filter추가
4.CSRF 설정
두 방법은 많이 비슷 하지만 Form방식은 동기, Ajax방식은 비동기 라는 차이점이 있다.
form 인증 방식처럼 Redirect 응답하는게아니라 데이터를 담어서(objectmapper) json형식으로 바디에 담아서 클라에게 응답하는게 가장 큰 차이점 이다.
ObjectMapper = Json으로 온 데이터를 객체로 만들어준다
인증 실패시 오류를 출력하도록 했다. 인증 성공시에는 토큰에 결과 값을 담아 반환한다.
@Bean 으로 추가해주고 ajax config 설정해준다
authenticationManager 설정도 잊지말자
AjaxProcessingFilter를 UsernamePasswordAuthenticationFilter보다 앞에 위치 시킨다.
addFilterBefore =기존필터 앞에 위치
addFilter = 가장 맨마지막에 위치할떄
addFilterAfter = 지금 추가하는 필터가 기존필터 뒤쪽
addFilterAt =기존필터위치를 대체하고자
form 인증 방식과 거의 흡사하다.
다만 provider에 들어오기전 토큰(supports메서드, 위 processingFilter 에서 온 토큰)와 인증이 끝나고난뒤 나오는 인증결과 토큰을 Ajax용으로 만들어주자
SpringSecurity가 우리가 만든 proivder를 사용할수 있도록 config에 추가해주자!