티스토리 뷰

Spring/Security

Spring Security (1)

evolutioning 2024. 10. 14. 11:41

Spring boot : 3.1

Spring Security6

Kotlin

 

Spring security의 방식에 대해선 다루지않고, 어떻게 작성했는지를 다루도록 하려한다.

 

1. Build.gradle.kts

dependencies {
   

    //spring-secutiry (보안)
    implementation("org.springframework.boot:spring-boot-starter-security")

}

의존성 추가를해주고

 

 

2.SecurityConfig.kt - FilterChain

@Bean
@Throws(Exception::class)
fun filterChain(http:HttpSecurity) : SecurityFilterChain{
    return http.csrf {
        obj: CsrfConfigurer<HttpSecurity> -> obj.disable()
    }.sessionManagement {
        it.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
    }.formLogin {
        it.loginPage("/login").permitAll() //이친구가 없으면 시큐리티 기본 login페이지가 로딩된다.-> 만들어놓은 js,html 작동을 안한다
            .usernameParameter("userid")
            .passwordParameter("userpw")
            .loginProcessingUrl("/login-security-try").permitAll() //시큐리티를 이용한 로그인 할 uri
            .successHandler(authenticationSuccessHandler())
            .failureHandler(authenticationFailureHandler())
            .permitAll()
    }.authorizeHttpRequests {
        it.anyRequest().permitAll()
    }.logout {
        it.logoutUrl("/logout").permitAll()
            .logoutSuccessUrl("/login").permitAll()
            .invalidateHttpSession(true)
            .deleteCookies("SESSION", "JSESSIONID", "XSRF-TOKEN")
    }.sessionManagement {
        it.sessionCreationPolicy(SessionCreationPolicy.ALWAYS)
            .invalidSessionUrl("/login")
            .maximumSessions(2)
            .maxSessionsPreventsLogin(false)
            .expiredUrl("/login")
    }.httpBasic { obj: HttpBasicConfigurer<HttpSecurity> -> obj.disable() }
    .build()
}

1) csft토큰은 당장은 disable시키고 나중에 적용하려한다.

2)SessionManagement : SessionCreationPolicy.STATELSEE : JWT토큰을 사용하기 위해 세션생성X

3) FormLogin :

loginPage("/login") -> 없다면 시큐리티의 기본 login페이지가 로딩된다.

username/passwordParameter : form을 submit할때 어떤 파라미터로 받을지 설정

loginProcessingUrl : js에서 form을 submit할때 정보를 넘길 url설정

Handler : 성공/실패 핸들러를 설정

 

직접 Provider / Success / Failuer handler를 작성했다.

 

// 성공 핸들러 함수
private fun authenticationSuccessHandler(): AuthenticationSuccessHandler {
    return EkeprlSuccessHandler()
}

 

// 실패 핸들러 함수
private fun authenticationFailureHandler(): AuthenticationFailureHandler {
    return EkeprlFailuerHandler()
}

 

//provider
@Bean
fun customAuthenticationProvider(): AuthenticationProvider {
    return CustomAuthenticationProvider()
}

 

직접 작성한 Provider / Handler는 이어서 2편에서 작성하도록 하겠다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함