์๋
ํ์ธ์! ์ค๋์ Spring Security์์ ๋ก๊ทธ์ธ ์คํจ ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ๋ก๊ทธ์ธ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ค์ํ ์คํจ ์ํฉ์ ์ฌ์ฉ์์๊ฒ ๋ช
ํํ๊ฒ ์ ๋ฌํ๋ ๊ฒ์ ์ค์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ผ๋ถ์
๋๋ค. ์ด๋ฅผ ์ํด Spring Security์ AuthenticationFailureHandler
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ์ฌ์ฉ์ ์ ์ ๋ก๊ทธ์ธ ์คํจ ํธ๋ค๋ฌ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
1. ์ฌ์ฉ์ ์ ์ ๋ก๊ทธ์ธ ์คํจ ํธ๋ค๋ฌ ๊ตฌํ
๋จผ์ , AuthenticationFailureHandler
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ CustomAuthenticationFailureHandler
ํด๋์ค๋ฅผ ๋ง๋ญ๋๋ค:
public class CustomAuthenticationFailureHandler implements AuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException {
// ๋ก๊ทธ์ธ ์คํจ ์ ๋ก์ง ๊ตฌํ
String errorMessage = "์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ค์ ํ์ธํด์ฃผ์ธ์";
if (exception instanceof DisabledException) {
errorMessage = "๊ณ์ ์ด ๋นํ์ฑํ๋์์ต๋๋ค.";
} else if (exception instanceof CredentialsExpiredException) {
errorMessage = "๋น๋ฐ๋ฒํธ๊ฐ ๋ง๋ฃ๋์์ต๋๋ค.";
}
// ์ธ์
์ ์ค๋ฅ ๋ฉ์์ง ์ ์ฅ
request.getSession().setAttribute("flash", errorMessage);
response.sendRedirect("/login");
}
}
์ด ํธ๋ค๋ฌ๋ ๋ก๊ทธ์ธ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋ค์ํ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ์ฌ์ฉ์์๊ฒ ์ ์ ํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ ๊ณตํฉ๋๋ค.
2. ๋ก๊ทธ์ธ ์ปจํธ๋กค๋ฌ์์ ๋ก๊ทธ์ธ ์คํจ ๋ฉ์์ง ์ฒ๋ฆฌ
๋ค์์ผ๋ก, ๋ก๊ทธ์ธ ์ปจํธ๋กค๋ฌ์์ ์ด ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค:
@Controller
public class LoginController {
@GetMapping("/login")
public String loginForm(@ModelAttribute("loginForm") LoginForm form, HttpServletRequest request, Model model) {
if (request.getSession().getAttribute("flash") != null) {
model.addAttribute("error", request.getSession().getAttribute("flash"));
request.getSession().removeAttribute("flash");
}
return "login/loginForm";
}
}
์ฌ๊ธฐ์๋ ๋ก๊ทธ์ธ ํผ์ ์์ฒญํ ๋ ์ธ์
์ ์ ์ฅ๋ ์ค๋ฅ ๋ฉ์์ง(flash
)๋ฅผ ํ์ธํ๊ณ , ์ด๋ฅผ ๋ชจ๋ธ์ ์ถ๊ฐํ์ฌ ๋ทฐ์ ์ ๋ฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ๋ก๊ทธ์ธ ์คํจ์ ๊ตฌ์ฒด์ ์ธ ์ด์ ๋ฅผ ์๋ฆด ์ ์์ต๋๋ค.
3. ์ฌ์ฉ์ ๊ฒฝํ ํฅ์
์ด๋ฌํ ๋ฐฉ๋ฒ์ผ๋ก ๋ก๊ทธ์ธ ์คํจ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํจ์ผ๋ก์จ ์ฌ์ฉ์์๊ฒ ๋ณด๋ค ๋ช ํํ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๋ ์ ํํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ์ธ์งํ๊ณ ์ ์ ํ ์กฐ์น๋ฅผ ์ทจํ ์ ์๊ฒ ๋ฉ๋๋ค.
๊ฒฐ๋ก
Spring Security์์ ์ฌ์ฉ์ ์ ์ ๋ก๊ทธ์ธ ์คํจ ํธ๋ค๋ฌ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๋ณด์์ ์ธ ์ธก๋ฉด๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์ ๊ฒฝํ์ ์ธก๋ฉด์์๋ ์ค์ํฉ๋๋ค. ์ค๋์ ๊ธ์ด ์ฌ๋ฌ๋ถ์ด ๋ณด๋ค ๋์ ๋ก๊ทธ์ธ ์คํจ ์ฒ๋ฆฌ ๋ก์ง์ ๊ตฌํํ๋ ๋ฐ ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.