ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 ์ž๊ฒฉ ์ฆ๋ช…์— ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค"

     

    ๋‹ค์‹œ ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ๋นฝ

     

    ์‹คํŒจ ์‹œ ์‹คํ–‰๋˜๋Š” ๋กœ์ง๋„ ๋ชจ๋‘ ์ •์ƒ ์ž‘๋™๋˜๋Š” ๊ฒƒ์ด ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Designed by Tistory.