스프링 기본 보안 구성은 다양한 확장성을 기본으로 가져가기 위해 내부적으로 매우 심하게 숨겨져 있습니다. 우선 전체적인 보안 기본 구성과 확장 구성하는 방법에 대해 자세히 설명해 보도록 하겠습니다. 많은 웹 문서에서 설명을 매우 복잡하게 설명하는 바람에 기초 스프링 보안 공부하는 사람에게 다양한 어려움을 주고있는것을 알게 됐습니다.
기본적 시큐리티에 필요한 파일 숫자는 단지 파일 하나 입니다. 기본으로 생성된 spring boot 프로젝트에서 아래 파일 하나만 추가한다면 스프링 시큐리티를 완성한 것입니다.
package com.security.app.security;
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.configurers.AbstractAuthenticationFilterConfigurer;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
String[] authRequestMatchers = {"/login"};
httpSecurity
.authorizeHttpRequests(
authorizationManagerRequestMatcherRegistry -> authorizationManagerRequestMatcherRegistry
.requestMatchers(authRequestMatchers).permitAll().anyRequest().authenticated())
.formLogin(AbstractAuthenticationFilterConfigurer::permitAll);
return httpSecurity.build();
}
@Bean
public UserDetailsService userDetailsService(){
UserDetails user = User.withUsername("user").password("{noop}1111").roles("USER").build();
return new InMemoryUserDetailsManager(user);
}
}
로그인 페이지는 스프링 시큐리티에서 제공을 해주니 페이지를 만들 필요는 없습니다. 아래는 기본으로 제공되는 로그인 페이지 입니다. 우선 아래와 같은 페이지를 보고싶은 경우 위 파일만 프로젝트 환경에 맞게 추가해 주시면 아래와 같은 페이지를 웹에서 확인 할 수 있습니다. 아이디 / 패스워드는 user / 1111 입니다.
로그인 이후 페이지는 아래와 같습니다. 로그인 성공 페이지 하나 만들어 줘야 합니다. 내용은 아래와 같습니다.
위 구성으로 조금씩 기능을 추가해 보도록 하겠습니다. 기본 프로젝트 전체 파일을 첨부합니다.
The dependencies of some of the beans in the application context form a cycle 오류 (0) | 2024.09.05 |
---|