[Photogram] 로그인 실패 처리

2022. 12. 25. 11:37·🚗 Backend Toy Project/Photogram
  • 회원가입의 경우 유효성 검사에 실패했을 경우 사용자에게 간단하게 메시지를 보여주는 방식으로 회원가입 실패 처리를 구현해놓았지만 로그인의 경우 이러한 처리가 없어 로그인 실패 처리를 구현해주었습니다.
  • 로그인 실패의 경우 회원가입 실패 시의 처리와는 달리 컨트롤러에서 발생하는 예외가 아닌 서비스 단에서 발생하는 예외였기 때문에 @ControllerAdvice와 @ExceptionHandler를 이용한 처리 방식으로는 제대로 동작하지 않았습니다.
  • 따라서 SecurityConfig 클래스에 failureHandler() 메소드를 추가해줌으로써 이를 구현해주었습니다.


📝 SecurityConfig

package com.cos.photogram.config;

...

@RequiredArgsConstructor
@EnableWebSecurity    //Security 활성화
@Configuration    //IoC
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private final AuthenticationFailureHandler customAuthFailureHandler;

    ...

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            ...
            .formLogin()
                ...
                .failureHandler(customAuthFailureHandler)  //로그인 실패시 이를 처리할 핸들러
            ...
    }
}

📝 CustomAuthFailureHandler

  • 로그인 실패 예외를 핸들링하기 위한 CustomAuthFailureHandler 클래스는 아래와 같이 구현하였습니다.
package com.cos.photogram.handler;

...

@Component
public class CustomAuthFailureHandler extends SimpleUrlAuthenticationFailureHandler {

    @Override
    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
            AuthenticationException exception) throws IOException, ServletException {

        String errorMessage;

        if (exception instanceof BadCredentialsException) {
            errorMessage = "아이디 또는 비밀번호가 맞지 않습니다. 다시 확인해 주세요.";
        } else if (exception instanceof InternalAuthenticationServiceException) {
            errorMessage = "내부적으로 발생한 시스템 문제로 인해 요청을 처리할 수 없습니다. 관리자에게 문의하세요.";
        } else if (exception instanceof UsernameNotFoundException) {
            errorMessage = "계정이 존재하지 않습니다. 회원가입 진행 후 로그인 해주세요.";
        } else if (exception instanceof AuthenticationCredentialsNotFoundException) {
            errorMessage = "인증 요청이 거부되었습니다. 관리자에게 문의하세요.";
        } else {
            errorMessage = "알 수 없는 이유로 로그인에 실패하였습니다 관리자에게 문의하세요.";
        }

        errorMessage = URLEncoder.encode(errorMessage, "UTF-8");
        setDefaultFailureUrl("/auth/signin?error=true&exception=" + errorMessage);

        super.onAuthenticationFailure(request, response, exception);
    }
}
  • 즉, 위와 같은 예외가 발생하면 특정 에러 메시지를 저장하여 setDefaultFailureUrl() 메소드를 통해 컨트롤러로 전달하는 것입니다.

📝 Controller

  • 이후 컨트롤러에서는 위에서 전달받은 메시지를 Model 객체를 통해 다시 View로 전달합니다.
package com.cos.photogram.web;

...

@RequiredArgsConstructor
@Controller
public class AuthController {

    /* 로그인 페이지 */
    @GetMapping("/auth/signin")
    public String signinForm(
            @RequestParam(value = "error", required = false) String error,
            @RequestParam(value = "exception", required = false) String exception,
            Model model) {

        model.addAttribute("error", error);
        model.addAttribute("exception", exception);

        return "auth/signin";
    }
}

📝 View

  • 마지막으로 로그인 페이지에서는 컨트롤러에서 전달받은 오류 메시지를 다음과 같이 사용자에게 출력해주면 됩니다.
<c:if test="${error}">
    <p class="exception">${exception}</p>
</c:if>

 

GitHub - Daegwon-Kim/SpringBoot-Photogram

Contribute to Daegwon-Kim/SpringBoot-Photogram development by creating an account on GitHub.

github.com

 

저작자표시 (새창열림)

'🚗 Backend Toy Project > Photogram' 카테고리의 다른 글

[Photogram] 실시간 알림  (0) 2023.03.02
[Photogram] 해시태그 기능 추가  (0) 2023.01.03
[Photogram] 검색 기능 구현  (0) 2022.12.22
[Photogram] OAuth2 페이스북 로그인  (0) 2022.07.19
[Photogram] 유효성 검사 자동화 - AOP 처리  (0) 2022.07.18
'🚗 Backend Toy Project/Photogram' 카테고리의 다른 글
  • [Photogram] 실시간 알림
  • [Photogram] 해시태그 기능 추가
  • [Photogram] 검색 기능 구현
  • [Photogram] OAuth2 페이스북 로그인
Baeg-won
Baeg-won
  • Baeg-won
    좋았다면 추억이고 나빴다면 경험이다.
    Baeg-won
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 🍃 Spring, Spring Boot
        • 스프링 프레임워크 기초
        • 스프링 핵심 원리 - 기본편
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편
        • 스프링 MVC
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리..
      • 🥑 Web Technoloy
      • 🚗 Backend Toy Project
        • 스프링 부트 게시판
        • Photogram
        • Baeg-won Clothing Gallery
      • 🥇 Problem Solving
        • Breadth-First Search
        • Depth-First Search
        • Backtracking
        • Simulation
        • Two-pointer
        • Binary Search
        • Greedy
        • Dynamic Programming
        • Minimum Spanning Tree
        • Dijkstra
        • Floyd warshall
      • ☕ Java
        • 명품 자바 에센셜
        • Applications
      • 🍦 JavaScript
        • JavaScript 기초
      • 🐧 Linux
        • 이것이 리눅스다(CentOS 8)
      • 📟 Database
        • 혼자 공부하는 SQL
      • 🧬 Data Structure
      • 🎬 HTML
      • 🎤 Tech Interview
      • 📌 etc
        • Unity 2D Raising Jelly Game
        • C++
        • 영어 쉐도잉
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Baeg-won
[Photogram] 로그인 실패 처리
상단으로

티스토리툴바