티스토리 뷰
0. Spring Security를 사용하려면
0-1. Spring Security Dependency를 pom에 등록한다.
0-2. SecurityConfig파일을 생성하여 필요한 Bean을 등록한다.
0-2-0. WebSecurityConfigurerAdapter를 extends해서 간편하게 구현할 수 있다.
0-2-1. 일반적으로 개발자가 구현한 컴포넌트는 @Component로 등록하면 끝이지만
0-2-2. 스프링에서 제공하는 컴포넌트 중 기본적으로 생성되지 않는 것들은
0-2-3. Config에서 별도로 제공해야 한다.
0-3. 여기서 생성해야 프로그램의 다른 부분에서 주입해서 사용할 수 있다.
1. BCryptPasswordEncoder 사용하기
1-1. 이 Encoder는 스프링에서 자동으로 생성되지 않는다.
1-2. 아래 Config 클래스에서 @Bean으로 생성해야 사용할 수 있다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.BeanIds;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public BCryptPasswordEncoder bcryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean(name = BeanIds.AUTHENTICATION_MANAGER)
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/showRegister", "/", "/index.html", "/registerUser", "/login", "/showLogin", "/login/*", "/reservations/*").permitAll()
.antMatchers("/admin/showAddFlight").hasAnyAuthority("ADMIN").anyRequest().authenticated()
.and()
.csrf().disable();
}
}
2. AuthenticationManager 사용하기
2-0 WebSecurityConfig 내에서 설정하는 경우는 필요가 없지만 외부에서 인증관리자를 사용하기 위한 설정이다.
2-1 AuthenticationManager는 Spring Boot 1.x에서는 기본적으로 스프링이 등록하였지만
2-2 Spring Boot 2.x부터는 자동등록 되지 않는다.
2-2-1 따라서 외부로 표출해 주는 메소드를 강제로 호출하여 @Bean으로 등록해 주어야 한다.
2-2-2 Override하는 메소드는 authenticationManagerBean()이다. authenticationManager()가 아니다.
2-2-3 만일 authenticationManager()를 override하면 엉뚱한 메소드가 override되어 StackOverflow가 발생한다.
2-3 따라서 위의 소스코드처럼 WebSecurityConfigurerAdapter를 Override하여 @Bean으로 등록해야 한다.
2-3-1 @Bean에 있는 name 속성은 선택적이다.
2-3-2 name 속성은 명시적으로 이 메소드에서 생성된 클래스가 프로그램의 AuthenticationManager라는 뜻이다.
3 기본적인 Spring Security설정은 WebSecurityConfigurerAdapter의 configure 메소드를 Override해서 한다.
3-1 antMatchers는 해당 경로의 기능을 어떤 권한과 매핑할지를 결정한다.
3-2 위 소스코드의 첫번째 antMatchers는 마지막에 permitAll 설정으로 누구나 사용할 수 있는 페이지를 지정한다.
3-3 두 번째 antMatchers는 ADMIN role이 등록된 사용자에게만 허용되는 기능이다.
'Spring > Spring Boot' 카테고리의 다른 글
Spring Boot : RestTemplate + Thymeleaf with Java Config - CRUD 클라이언트 구현 (0) | 2020.05.24 |
---|---|
Spring Boot : 기초지식 (0) | 2020.05.23 |
Spring Boot : application.properties 읽어오기 (0) | 2020.05.01 |
Spring Boot : Logger logback 설정파일 작성 및 Customization (2) | 2020.05.01 |
Spring Boot : Logger 사용 기본 절차 및 레벨 설정 (0) | 2020.05.01 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- 스프링
- Spring
- 상속
- spring boot
- 하이버네이트
- mapping
- Security
- 로그인
- login
- jsp
- one-to-one
- form
- Validation
- XML
- Angular
- RestTemplate
- 스프링부트
- Rest
- 매핑
- MYSQL
- 외부파일
- Many-To-Many
- one-to-many
- hibernate
- crud
- 설정
- WebMvc
- 설정하기
- 자바
- Spring Security