스프링 시큐리티/실전프로젝트 - 인증 프로세스 Ajax 인증 구현

ch03. 인증 처리자 - AjaxAuthenticationProvider

webmaster 2022. 1. 20. 12:50
728x90
  • AuthenticationProvider 인터페이스 구현
  • 인증 작동 조건
    • supports(Class<?> authentication) 
      • ProviderManager 로부터 넘어온 인증 객체가 AjaxAuthenticationTokenAjaxAuthenticationToken 타입이면 작동
  • 인증 검증이 완료되면 AjaxAuthenticationToken 생성하여 최종 인증 객체 반환
  • AjaxAuthenticationProvider
    • public class AjaxAuthenticationProvider implements AuthenticationProvider {
      
          @Autowired
          private UserDetailsService userDetailsService;
      
          @Autowired
          private PasswordEncoder passwordEncoder;
      
          @Override
          @Transactional
          public Authentication authenticate(Authentication authentication) throws AuthenticationException {
      
              String username = authentication.getName();
              String password = (String) authentication.getCredentials(); //authentication에서 입력한 값을 가지고 올수 있다.
              AccountContext accountContext = (AccountContext)userDetailsService.loadUserByUsername(username);
      
              if(!passwordEncoder.matches(password, accountContext.getAccount().getPassword())){
                  throw new BadCredentialsException("BadCredentialsException"); //패스워드 일치 X
              }
      
              AjaxAuthenticationToken ajaxAuthenticationToken
                      = new AjaxAuthenticationToken(accountContext.getAccount(), null, accountContext.getAuthorities());
      
              return ajaxAuthenticationToken;
          }
      
          @Override
          public boolean supports(Class<?> authentication) {
              //AjaxAuthenticationToken인지 확인
              return authentication.equals(AjaxAuthenticationToken.class);
          }
      }
      
    • 인증이 성공하면 AjaxAuthenticationToken을 반환하도록 구현
    • supports 함수에서 AjaxAuthenticationToken이 맞는지를 확인한다.
  • Configure에서 내 providier를 빈으로 등록한다.
  • 현재 반환값
  • 현재는 Suceess Handler가 Ajax용으로 구현이 되어있지 않기 때문에 body에 아무런 값이 없어 이러한 응답을 한다.
728x90