본문 바로가기
개발/Spring

[SpringBoot] SecurityConfig + JWT - SecurityConfig 설정

by 코딩하는 흰둥이 2023. 4. 27.
  • Java 17
  • Maven
  • Spring Boot 3.0.3
  • Oracle 11g
  • IntelliJ Ultimate
  • DBeaver

 

pom.xml
        <!-- spring-security-core -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <version>3.0.4</version>
        </dependency>

        <!-- jwt -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>

 

SecurityConfig.java
package com.example.practice.security.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    private static final String[] AUTH_WHITELIST = {
            "/home", "/login", "/register", "/bootstrap/**"
    };

    @Bean
    protected SecurityFilterChain config(HttpSecurity http) throws Exception {
//        http.csrf().disable();

        http.authorizeHttpRequests(authorize -> authorize
                .shouldFilterAllDispatcherTypes(false)
                .requestMatchers(AUTH_WHITELIST).permitAll() // 해당 경로 접근 허용
                .anyRequest().authenticated() // 그 외 페이지는 인증을 거쳐야함
        );

        http.formLogin(login -> login
                .loginPage("/login") // 로그인 페이지 지정 지정
                .loginProcessingUrl("/") // 로그인 처리 URL 지정
                .failureForwardUrl("/login") // 로그인 실패 URL 설정
                .usernameParameter("m_id")
                .passwordParameter("m_password")
                .defaultSuccessUrl("/index", true)
                .permitAll()
        );

//                .logout(withDefaults()) // 기본 예제 logout
        http.logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/login/logout"))   // 로그아웃 url
                .logoutSuccessUrl("/")                                                     // 성공 url
                .invalidateHttpSession(true)                                               // 인증정보 삭제 세션 무효화
                .deleteCookies("JSESSIONID", "remember-me");              // JSESSIONID , remember-me 쿠키 삭제

        http.sessionManagement()
                .maximumSessions(1) // 세션 최대 허용 수 1 , -1이면 무제한 세션 허용
                .maxSessionsPreventsLogin(false)    // true 면 중복 로그인 제한 , false면 이전 로그인 세션 해제
                .expiredUrl("/");    // 세션이 만료되었을때 이동 페이지

//        http.rememberMe()   // 로그인 유지
//                .key("02930129FWSJKW29213912")  // 토큰 생성 시 키 값
//                .alwaysRemember(false)          // 항상 기억만 할 것인지 여부
//                .tokenValiditySeconds(60)       // 시간초 , 1분 유지
//                .userDetailsService(RemembermeUserDetailsService)
//                .tokenRepository(tokenRepository())
//                .rememberMeParameter("remember-me"); // remember-me 파라미터 이름 지정
        // exception 처리
//		http.exceptionHandling()
//                .accessDeniedHandler(webAccessDeniedHandler)            // 권한이 없는 사용자 접근 시
//                .authenticationEntryPoint(webAuthenticationEntryPoint); // 인증되지 않은 사용자 접근 시

        return http.build();
    }


}

 

로그인 및 권한 등의 처리를 위해 Security 설정을 계속 만지고 있는데

잘 안돼서 우선 설정만 남기려고 한다

Spring Boot 3.0.0 이상부터는 WebSecurityConfigurerAdapter 를 사용할 수 없으며

위의 SecurityConfig는 3.0.0 이상의 버전에 맞추어 설정 중이며 

JPA를 사용하지 않고 구현하려하는 중이다

댓글