-
[Spring Security] Form Login ์ธ์ฆ Api ์ฌ์ฉํ๊ธฐSpring/Spring Secutiry 2024. 1. 9. 22:58

๐์๋ ํ์ธ์. ๊น์์ธ์ ๋๋ค.
์ด๋ฒ ๊ธ์์๋ form login ์ธ์ฆ api๋ค์ ๋ํด์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ง๋ ๊ธ์์ ๋ง๋ ์ปค์คํ ์ธ์ฆ๊ตฌํ์ ์ด์ด์ ์์ฑํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด์ ๊ธ ๋ณด๋ฌ๊ฐ๊ธฐ ๐ฝ
[Spring Security] ์ฌ์ฉ์ ์ ์ ๋ณด์ ๊ธฐ๋ฅ ๊ตฌํ
๐์๋ ํ์ธ์. ๊น์์ธ์ ๋๋ค. ์ด๋ฒ ๊ธ์์ ์คํ๋ง ์ํ๋ฆฌํฐ์ ์น ๋ณด์ ๊ธฐ๋ฅ ์ด๊ธฐํ ๋ฐ ์ค์ ํ๋ ํด๋์ค WebSecurityConfigurerAdapter ๋ฅผ ์์๋ฐ์ ์ปค์คํ ์ธ์ฆ ๊ธฐ๋ฅ์ ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค. WebSecurityConfig
exception-message.tistory.com
๋จผ์ SecurityConfig๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
SecurityConfig
@Configuration @EnableWebSecurity class SecurityConfig { @Bean fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { http //์ธ๊ฐ .authorizeRequests() .anyRequest().authenticated() //๋ชจ๋ ์์ฒญ์ ์ธ์ฆ ๋ฐ์ http //์ธ์ฆ .formLogin() .loginPage("/loginPage") //๋ก๊ทธ์ธ ํ๋ฉด์ฐ๊ฒฐ .defaultSuccessUrl("/") //๋ก๊ทธ์ธ ์ฑ๊ณต ์ ์ด๋ํ ๊ณณ .failureUrl("/login") //์คํจ์ ๋ค์ ๋ก๊ทธ์ธํ๋ฉด์ผ๋ก ์ด๋ .usernameParameter("userId") .passwordParameter("passwd") .loginProcessingUrl("/login_proc") //๋ก๊ทธ์ธ ํ๋ก์ธ์ฑ .successHandler( SuccessHandler() //์ฑ๊ณตํ์ ๋ ) .failureHandler( FailureHandler() //์คํจํ์ ๋ ) .permitAll() //"/loginPage"๊ฒฝ๋ก๋ ์ ์ฒด ์ ๊ทผ ๊ฐ๋ฅ return http.build() } }.loginPage() ๋ก๊ทธ์ธ ํ์ด์ง ์ฐ๊ฒฐ .defaultSuccessUrl() ๋ก๊ทธ์ธ ์ฑ๊ณต์ ์ด๋ํ ๊ฒฝ๋ก .failureUrl() ๋ก๊ทธ์ธ ์คํจ์ ์ด๋ํ ๊ฒฝ๋ก .userNameParameter() id ํ๋ผ๋ฏธํฐ .passwordParameter() pw ํ๋ผ๋ฏธํฐ .loginProcessingUrl() ๋ก๊ทธ์ธ ํ๋ก์ธ์ค ๊ฒฝ๋ก .successHandler() ์ฑ๊ณต์ ์คํํ ์ด๋ฒคํธ .failureHandler() ์คํจ์ ์คํํ ์ด๋ฒคํธ .permitAll() ์ ์ฒด ์ ๊ทผ ํ์ฉ 
successHandler์ failureHandler๋ ๊ฐ๊ฐ
AuthenticationSuccessHandler์ AuthenticationFailureHandler๋ฅผ ์์๋ฐ์ ํด๋์ค๋ก ์์ฑํ์ต๋๋ค.
ํ๋ฉด์ ์์ผ๋ ๊ฐ๋จํ๊ฒ ์ด๋ฆ, exception์ถ๋ ฅ์ผ๋ก ๊ตฌ์ฑํ์ต๋๋ค.
SuccessHandler
class SuccessHandler : AuthenticationSuccessHandler { override fun onAuthenticationSuccess(request: HttpServletRequest?, response: HttpServletResponse?, authentication: Authentication?) { //์ธ์ฆ ์ฑ๊ณต ํ ์ํํ ๋ก์ง println("authentication " + authentication?.name) } }FailureHandler
class FailureHandler : AuthenticationFailureHandler { override fun onAuthenticationFailure(request: HttpServletRequest?, response: HttpServletResponse?, exception: AuthenticationException?) { //์ธ์ฆ ์คํจ ํ ์ํํ ๋ก์ง println("exception " + exception?.message) response?.sendRedirect("/login") } }Securitycontroller
@RestController class SecurityController { @GetMapping("/") fun index(): String { return "home" } @GetMapping("/loginPage") fun loginPage(): String { return "loginPage" } }securityController์ /loginPage๊ฒฝ๋ก์ get๋ฉ์๋๋ฅผ ์ถ๊ฐํด ์ฃผ์์ต๋๋ค.
๋ก๊ทธ์ธํ๋ฉด์ ๋ง๋ค์ง ์์์ผ๋ ์์๋ก loginPageํ ์คํธ๋ฅผ ์ถ๋ ฅํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.

ํ๋ฉด์ฐ๊ฒฐ๊ธฐ๋ฅ์ ์ ์๋ํ๋๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ธ์ฆ ํ ์คํธ๋ฅผ ํ๊ธฐ ์ํด ์ ์ ํ๋ฉด์ ์ฃผ์์ฒ๋ฆฌํ๊ณ , ๊ธฐ๋ณธ์ ๊ณต ๋ก๊ทธ์ธํ๋ฉด์ผ๋ก ๋์๊ฐ๋ณด๊ฒ ์ต๋๋ค.

๋ก๊ทธ์ธ ์ฑ๊ณต์ ์ ์ ๋ค์์ ์ถ๋ ฅํ๋ ๋ก์ง์ผ๋ก ์์ฑํ์ผ๋ ์ฑ๊ณตํ๋ฉด ์ฝ์์ ์ ์ ๋ค์์ด print ๋ ๊ฒ์ ๋๋ค.
properties์ ์ถ๊ฐํด๋์๋ ์์ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํด ๋ณผ๊น์?

์ฑ๊ณต! 
login_proc๋ก ์ด๋! ์ด๋ฒ์ ๋ค๋ฅธ ์์ด๋๋ก ๋ก๊ทธ์ธ์ ์๋ํด ๋ณด๊ฒ ์ต๋๋ค.

"exception ์๊ฒฉ ์ฆ๋ช ์ ์คํจํ์์ต๋๋ค" 
๋ค์ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ๋นฝ ์คํจ ์ ์คํ๋๋ ๋ก์ง๋ ๋ชจ๋ ์ ์ ์๋๋๋ ๊ฒ์ด ํ์ธ๋์์ต๋๋ค.
'Spring > Spring Secutiry' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Security] ์ฌ์ฉ์ ์ ์ ๋ณด์ ๊ธฐ๋ฅ ๊ตฌํ (0) 2024.01.09 [Spring Security] ์คํ๋ง ์ํ๋ฆฌํฐ ์์กด์ฑ ์ถ๊ฐ (1) 2024.01.09