본문 바로가기
Spring/Spring 팁

[ Spring Security ] Spring Security0

by E145 2021. 8. 30.
반응형

 

이 글은 인프런 백기선님의 스프링 시큐리티 강좌(스프링 시큐리티 : 폼 인증)를 보고 정리한 글입니다.

 

 

스프링 시큐리티 - 인프런 | 강의

스프링 시큐리티 구동 원리 및 구조를 이해하고 스프링 시큐리티가 제공하는 다양한 기능을 활용하여 웹 애플리케이션에 필요한 인증 및 인가 기능을 설정하는 방법을 살펴봅니다. , 대부분의

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

댓글