[Web_3] STUSSY CLONE PROJECT 5 ๐Ÿ‘ฝ

08627ยท2022๋…„ 10์›” 5์ผ
2

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
13/13
post-thumbnail


๐Ÿ“Œ ์˜ˆ์™ธ๋ฅผ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ (@ExceptionHandler)
๐Ÿ‘พ Form ์œผ๋กœ ๋กœ๊ทธ์ธ ์ •๋ณด ๊ฐ์ฒด๋กœ ๋ฐ›์•„์˜ค๊ธฐ


๐Ÿ’ก ์˜ˆ์™ธ๋ฅผ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ (@ExceptionHandler)

(1)

โ–ซ๏ธ AuthFailureHandler.java
โ–ถ๏ธ ์ธ์ฆ ์‹คํŒจ error (๋กœ๊ทธ์ธ ์‹คํŒจ) ์ฒ˜๋ฆฌ

public class AuthFailureHandler implements AuthenticationFailureHandler {

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

        if(exception.getClass() == UsernameNotFoundException.class || exception.getClass() == BadCredentialsException.class) {
            response.sendRedirect("/account/login?error=auth");
        }else {
            response.sendRedirect("/account/login?error");
        }
        
    }
}

๐ŸฆŽ AuthenticationFailureHandler๋Š” Spring Security ์ž์ฒด ์ธํ„ฐํŽ˜์ด์Šค๋กœ, ๊ตฌํ˜„ํ•˜์—ฌ( โ†’ AuthFilureHandler) SecurityConfig์—์„œ ์„ค์ •ํ•ด์ฃผ์–ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

โ€ป SecurityConfig ์—์„œ โ†’ failureHandler(new AuthFailureHandler()) ์„ค์ • ๋„ฃ์–ด์คŒ.

  • UsernameNotFoundException ; ๊ฐ€์ž…ํ•˜์ง€ ์•Š์€ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ์‹œ
  • BadCredentialsException ; ์•„์ด๋””๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ‹€๋ฆฐ ๊ฒฝ์šฐ ๋ฐœ์ƒ

์œ„ ๋‘ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ auth error ์ž„์„ ์•Œ๋ ค์คŒ.

(2)

โ–ซ๏ธ CustomValidationException.java
โ–ถ๏ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์‹คํŒจ ์‹œ ๋„์›Œ์ค„ ์—๋Ÿฌ

@Getter
public class CustomValidationException extends RuntimeException {

    private Map<String, String> errorMap;

    public CustomValidationException(String message, Map<String, String> errorMap) {
        super(message);
        this.errorMap = errorMap;
    }
}

โ–ซ๏ธ CustomInternalServerErrorException.java
โ–ถ๏ธ ์„œ๋ฒ„ ์—๋Ÿฌ

public class CustomInternalServerErrorException  extends Exception {

    public CustomInternalServerErrorException(String message) {
        super(message);
    }
}

โ–ซ๏ธ RestControllerExceptionHandler.java

@RestController
@RestControllerAdvice // โžก๏ธ โœ”๏ธ๋ชจ๋“  Controller ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ํ•ด๋‹น ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ 
public class RestControllerExceptionHandler {

    @ExceptionHandler(CustomValidationException.class) // โžก๏ธ ํ•ด๋‹น ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„ ๋•Œ, ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋กœ ์ฒ˜๋ฆฌํ•จ  
    public ResponseEntity<?> validationErrorException(CustomValidationException e) {
        return ResponseEntity
                .badRequest()
                .body(new CMRespDto<>(-1, e.getMessage(), e.getErrorMap()));
    }


    @ExceptionHandler(CustomInternalServerErrorException.class)
    public ResponseEntity<?> internalServerErrorException(CustomInternalServerErrorException e) {
        return ResponseEntity
                .internalServerError()
                .body(new CMRespDto<>(-1, e.getMessage(), null));
    }

}

Advice ๋ž€ JoinPoint ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๋กœ์ง์œผ๋กœ, ์ค‘๊ฐ„์— ๋ผ์›Œ๋„ฃ์–ด ์‚ฌ์šฉํ•  ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ๋งํ•จ.

@RestControllerAdvice ๋Š” @ControllerAdvice + @ResponseBody ๊ธฐ๋Šฅ

โžก๏ธ Controller ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ํ•ด๋‹น ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋‚š์•„์ฑ„์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋จ.

โœ–๏ธ ๊ฐœ๋ณ„ Controller ์— ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜์—ฌ , ํ•ด๋‹น Controller ์—์„œ ๊ฐ์ž ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Œ.


๐Ÿ‘พ Form ์œผ๋กœ ๋กœ๊ทธ์ธ ์ •๋ณด ๊ฐ์ฒด๋กœ ๋ฐ›์•„์˜ค๊ธฐ

โ–ซ๏ธ login.js

const registerButton = document.querySelectorAll(".login-button")[0]; // โ†’ ์‹ ๊ทœ๊ฐ€์ž…
const loginButton = document.querySelectorAll(".login-button")[1]; // โ†’ ๋กœ๊ทธ์ธ

registerGoButton.onclick = () => {
    location.href = "/account/register";
}

loginButton.onclick = () => {
    const loginForm = document.querySelector("form");
	// form <email & password>
  // ๏ผŠbutton type="submit" . . . 
}



์ฐธ๊ณ  ๐Ÿง™
custom exception์„ ์–ธ์ œ ์จ์•ผ ํ• ๊นŒ?
@RestControllerAdvice๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž
@ExceptionHandler๋ฅผ ํ†ตํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
controller-advice


๐Ÿ“ข ์†Œ๊ฐ ๐Ÿ‘ฝ
์˜ค๋Š˜์€ ์นญ๊ตฌ์™€ ํ•จ๊ป˜ ์™“์ฑ ํŒŒํ‹ฐ ํ•˜๊ธฐ๋กœ ํ•จ
์นœ๊ตฌ๊ฐ€ ์—ด์‹ฌํžˆ ๊ณจ๋ผ์˜จ ์˜ํ™”๋Š” ๋ฐ”๋กœ . . .
<์˜์•„์˜ฌ๋ฆฐ ๋ถˆ๊ฝƒ, ๋ฐ‘์—์„œ ๋ณผ๊นŒ? ์˜†์—์„œ ๋ณผ๊นŒ?> ์˜ 1993๋…„ ๋ฒ„์ „ . .
์ด๋Ÿฐ ๊ฑธ ์–ด๋””์„œ ์ฐพ์•„์˜จ ๊ฑธ๊นŒ? ๊ฝค๋‚˜ ์›ƒ๊ธด
์ง‘์ค‘๋ ฅ ๋”ธ๋ฆฌ๋Š” ์ธ๊ฐ„๋“ค์ด๊ธฐ ๋•Œ๋ฌธ์— ์งง์€ ์˜ํ™”๋กœ ๊ณจ๋ผ์™”๋‹ค๊ณ  ํ•œ๋‹ค
๋„๋ฏธ๋…ธ ํ”ผ์ž 1+1 ๋ฐ์ด๋ผ์„œ ํ”ผ์ž ์‚ฌ์™€์„œ ๋จน์œผ๋ฉด์„œ ๋ด์•ผ์ง• (โ€พโ—กโ—)

0๊ฐœ์˜ ๋Œ“๊ธ€