이 글은 인프런 백기선님의 스프링 시큐리티 강좌(스프링 시큐리티 : 폼 인증)를 보고 정리한 글입니다.
스프링 시큐리티 - 인프런 | 강의
스프링 시큐리티 구동 원리 및 구조를 이해하고 스프링 시큐리티가 제공하는 다양한 기능을 활용하여 웹 애플리케이션에 필요한 인증 및 인가 기능을 설정하는 방법을 살펴봅니다. , 대부분의
www.inflearn.com
Spring Security 기본 설정
Spring Secuirty 사용하기
- dependency에 Spring Security를 추가한다.
- Srping Boot에서는 기본적으로 Spring Security를 간단하게 설정할 수 있다.
=> spring-boot-starter-security
- 의존성 추가 시 기본적으로 모든 요청에 인증을 필요로 한다.
- 스프링 시큐리티에서 제공하는 기본 유저만 인증이 가능하다.
Spring Security 설정하기
- WebSecurityConfigurerAdapter를 상속 받는 클래스를 선언한다.
- @Configuration과 @EnableWebSecurity 어노테이션을 추가한다.
- configure(HttpSecurity http)메소드를 오버라이딩한다.
- configure에서 http에 인증이 필요한 URL, 인증이 필요없는 URL을 설정할 수 있다.
- 뿐만 아니라, 권한이 필요한 URL, formLogin 사용 등을 설정할 수 있다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
// 해당 URL은 인증 없이 사용 가능
.mvcMatchers("/", "/info", "/account/**", "/signup").permitAll()
// 해당 URL은 특정 권한이 필요
.mvcMatchers("/admin").hasRole("ADMIN")
.mvcMatchers("/user").hasRole("USER")
// 그 외 나머지 요청(anyRequest)은 인증 필요(authenticated)
.anyRequest().authenticated();
http.formLogin();
http.httpBasic();
}
}
UserDetalService
- SpringSecurity에서 제공하는 것.
- Authentication 관리 시 DAO를 통해서 유저 정보를 읽어온다.
- loadUserByUsername 메소드를 오버라이딩 하여 username으로부터 유저 정보인
UserDetails를 리턴할 수 있다.
- loadUserByUsername 부분에서 DB의 정보와 클라이언트에서 요청한 정보를 비교하여
인증 여부를 판단한다.
public AccountService implements UserDetailsService{
@Autowired
AccountRepository accountRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{
Account account = accountRepository.findByUsername(username);
if(account == null){
throw new UsernameNotFoundException(username);
}
return User.builder()
.username(account.getUsername())
.password(account.getPassword())
.roles(account.getRole())
.build();
}
}
PasswordEncoder
- SpringSecurity는 password에 특별한 패턴을 요구한다.
- {암호화 알고리즘 패턴} 비밀번호
ex) {noop}password
- SpringSecurity5 부터는 PasswordEncoderFactories를 이용하여 간단하게 인코더를 생성할 수 있다.
- PasswordEncoder를 빈으로 등록하면된다.
'Spring > Spring 팁' 카테고리의 다른 글
Kotlin과 all-open (0) | 2022.02.14 |
---|---|
Kotlin과 Spring Bean (0) | 2022.02.06 |
[Spring] @Configuration과 @Component, 그리고 @Bean (0) | 2022.01.29 |
Spring Boot - Validation (0) | 2021.09.23 |
댓글