🤔 로그인 실패 시 아무런 메세지가 나오지 않아 사용자 입장에서 불편할 수 있다
화면에 에러메세지를 출력하자 (SpringBoot ver 2.7.18)
1. LoginFailureHandler.java
- 로그인 실패 핸들러 만들기
@Component
public class LoginFailureHandler extends SimpleUrlAuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
AuthenticationException exception) throws IOException, ServletException {
String errorMessage;
if (exception instanceof BadCredentialsException || exception instanceof InternalAuthenticationServiceException) {
errorMessage = "아이디 또는 비밀번호가 맞지 않습니다.";
} else if (exception instanceof AuthenticationCredentialsNotFoundException) {
errorMessage = "인증 요청이 거부되었습니다. 관리자에게 문의하세요.";
} else {
errorMessage = "알 수 없는 이유로 로그인에 실패하였습니다. 관리자에게 문의하세요.";
}
errorMessage= URLEncoder.encode(errorMessage,"UTF-8");
setDefaultFailureUrl("/login?error=true&exception=" + errorMessage);
super.onAuthenticationFailure(request, response, exception);
}
}
2. SecurityConfig.java
- 만든 LoginFailureHandler 클래스의 인스턴스 생성
private final LoginFailureHandler loginFailureHandler = new LoginFailureHandler();
- 핸들러 적용 (.failureHandler(loginFailureHander) 추가)
.formLogin((formLogin) -> formLogin
.loginPage("/loginForm")
.usernameParameter("username")
.passwordParameter("password")
.loginProcessingUrl("/login")
.failureHandler(loginFailureHandler) // 로그인 실패
.defaultSuccessUrl("/"))
3. Controller
- error, exception을 model에 추가
@GetMapping("/login")
public String login(@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 "/user/login";
}
4. loginForm
- 로그인 실패 메세지 화면에 출력
<form action="/loginProc" method="POST">
<input type="text" name="username" id="username"/>
<input type="password" name="password" id="password"/>
<button>로그인</button>
</form>
// 로그인 실패 메세지 출력
<div class="my-err-msg">
<c:if test="${not empty error}">
<p>${exception}</p>
</c:if>
</div>
'개발 > SpringBoot' 카테고리의 다른 글
[SpringBoot] OAuth 로그인 - 2 구현 (구글, 네이버, 카카오) (0) | 2024.02.14 |
---|---|
[SpringBoot] OAuth 로그인 - 1 사전 준비 (구글, 네이버, 카카오) (0) | 2024.02.14 |
[SpringBoot] SpringSecurity - 1 로그인 (0) | 2024.02.13 |
[SpringBoot] 썸머노트(summernote) - 3 이미지 S3 저장 (1) | 2024.02.13 |
[SpringBoot] 썸머노트(summernote) - 2 이미지 저장 (1) | 2024.02.13 |