본문으로 바로가기

3일차,스프링 시큐리티 2

category Spring Security 2025. 1. 8. 21:53
반응형

학습목표 :

1.커스텀 login 처리

2.화면별/경로별 접근 인가

 

패키지 설정 : config 생성

 

1. WebMvcConfig class 를 생성한다. .

package com.example.springsecurity.config;

import org.springframework.boot.web.servlet.view.MustacheViewResolver;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer{  

  @Override
  public void configureViewResolvers(ViewResolverRegistry registry) {
      MustacheViewResolver resolver = new MustacheViewResolver();

      resolver.setCharset("UTF-8");
      resolver.setContentType("text/html;charset=UTF-8");
      resolver.setPrefix("classpath:/templates/");
      resolver.setSuffix(".html");

      registry.viewResolver(resolver);
  }
}

 

 

2. SecurityConfig class 를 생성한다.

package com.example.demo.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.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    // 스프링 시큐리티에서는 비밀번호를 암호화해서 저장해야 합니다. 이때 사용할 암호화 클래스입니다.
    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    // 시큐리티 설정
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        // csrf 보안 해제 (개발 환경에서 설정시 복잡성) 가동계에서는 주석처리 필요.
        http.csrf(csrf -> csrf.disable());

        // 접근 경로별 인가 설정
        http.authorizeHttpRequests(auth -> auth
                        .anyRequest().permitAll()
                );


        //SpringSecurity 기본form login사용
        http.formLogin(httpSecurityFormLoginConfigurer -> httpSecurityFormLoginConfigurer.permitAll()
        );


        return http.build();
    }



}

 

 

.requestMatchers("/user/**").authenticated() 추가되면

http.formLogin(httpSecurityFormLoginConfigurer -> httpSecurityFormLoginConfigurer
                .loginProcessingUrl("/loginProc")
        );

 

http://localhost:8080/user/user1 호출시 

추가해야 기본 login 화면이 나온다.

 

package com.example.springsecurity.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.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    // 스프링 시큐리티에서는 비밀번호를 암호화해서 저장해야 합니다. 이때 사용할 암호화 클래스입니다.
    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    // 시큐리티 설정
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        // csrf 보안 해제 (개발 환경에서 설정시 복잡성) 가동계에서는 주석처리 필요.
        http.csrf(csrf -> csrf.disable());

        // 접근 경로별 인가 설정
        http.authorizeHttpRequests(auth -> auth
                        .requestMatchers("/user/**").authenticated()
                        .anyRequest().permitAll()

                );

        //SpringSecurity 기본form login사용
        http.formLogin(
                httpSecurityFormLoginConfigurer -> {

                }
        );
        

        return http.build();
    }



}

 

 

 

Spring Security 로그인 처리 동작 확인

Spring Security 인증 처리 과정

 

반응형