시큐리티란 ?
- 사용자의 로그인과 세션 트래킹은 웹 애플리케이션에서 필수적인 기능
스프링 시큐리티의 기본 설정
프로젝트 내 pom.xml 파일에 관련 의존성 라이브러리를 추가한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity6</artifactId>
</dependency>
기존의 config 패키지에 SecurityConfig.java 클래스를 추가하여
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
}
@Configuration : Bean을 수동으로 등록하기 위해서 설정 class위에 @Configuration 어노테이션을 추가하고, @Bean을 사용해 수동으로 빈을 등록할 수 있다.
시큐리티 예시 )
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
// http.formLogin()
http.formLogin((formLogin) -> formLogin
.loginPage("/member/login")
.usernameParameter("userid")
.defaultSuccessUrl("/"))
// .and()
// .logout()
// .logoutUrl("/member/logout")
// .logoutSuccessUrl("/member/login")
// .invalidateHttpSession(true);
.logout(logout -> logout
.logoutUrl("/member/logout")
.logoutSuccessUrl("/member/login")
.invalidateHttpSession(true));
http.authorizeHttpRequests()
.requestMatchers("/file/**").hasRole("ADMIN")
.requestMatchers("/board/**").hasAnyRole("USER", "ADMIN")
.requestMatchers("/**").permitAll()
.requestMatchers("/css/**").permitAll()
.requestMatchers("/js/**").permitAll()
.requestMatchers("/images/**").permitAll()
.requestMatchers("/member/insert").permitAll()
.requestMatchers("/member/login").permitAll();
return http.build();
}
@Bean
@ConditionalOnMissingBean(UserDetailsService.class)
public InMemoryUserDetailsManager userDetailsService() {
List<UserDetails> userDetailsList = new ArrayList<>();
userDetailsList.add(User.withUsername("foo")
.password("{noop}demo")
.roles("ADMIN").build());
userDetailsList.add(User.withUsername("bar")
.password("{noop}demo")
.roles("USER").build());
userDetailsList.add(User.withUsername("ted")
.password("{noop}demo")
.roles("ADMIN", "USER").build());
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(userDetailsList);
return manager;
}
}
이 설정은 단순성을 위해 인메모리 인증을 사용한다. 실제 환경에서는 더 안전한 데이터베이스 기반 인증과 교체하는 것이 좋다.
[Spring] JWT (JSON Web Token) (1) | 2023.12.19 |
---|---|
[Spring] Security 동작 확인 / 사용 방법 (0) | 2023.12.18 |
[Spring] HttpServletRequest , HttpServletResponse란? / 주요 기능과 자주 사용하는 메서드 (0) | 2023.12.11 |
[Spring] HttpServlet 란? / HttpServlet 과정 (0) | 2023.12.11 |
[Spring] PRG 패턴 / 와이어프레임 (0) | 2023.12.11 |