상세 컨텐츠

본문 제목

[SPRING SECURITY] 스프링 부트 환경설정

JAVA/SPRING

by ranlan 2021. 3. 14. 21:09

본문

728x90

스프링 시큐리티 라이브러리 추가

📄 build.gradle

dependencies {
    
    # spring security
    implementation 'org.springframework.boot:spring-boot-starter-security'
    
    # security tag 사용
    implementation 'org.springframework.security:spring-security-taglibs'
    
}

📄 application.properties

# Security logging
logging.level.org.springframework.security=debug

 

 

어노테이션 기반의 환경설정

📄 SecurityConfig.java

@Configuration // 1
@EnableWebSecurity // 2
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomAuthenticationSuccessHandler customAuthenticationSuccessHandler;
    @Autowired
    private CustomAuthenticationFailureHandler customAuthenticationFailHandler;

    @Bean // 3
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public AuthenticationProvider authenticationProvider() {
        return new CustomAuthenticationProvider();
    }

    @Override // 4
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/css/**", "/js/**", "/img/**", "/lib/**");
    }

    @Override // 5
    protected void configure(HttpSecurity http) throws Exception {
    
        http.authorizeRequests()
                .antMatchers("/", "/error", "/favicon.ico",
                        "/**/*.css",
                        "/**/*.js",
                        "/**/*.png",
                        "/**/*.jpg",
                        "/login*/*").permitAll()
                .antMatchers("/member/*")
                .authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .successHandler(customAuthenticationSuccessHandler)
                .failureHandler(customAuthenticationFailHandler)
                .and()
            .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login")
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .invalidateHttpSession(true);

    }

    @Override // 6
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(authenticationProvider());
    }
}
  1. configuration으로 등록
  2. spring security 활성화
  3. 비밀번호 암호화, 복호화 로직 등록
  4. configure(WebSecurity web)
    FilterChainProxy 생성하여 다양한 Filter 설정 적용
    web.ignoring().antMatchers(정적파일경로)를 통해 정적 파일에 대한 시큐리티 절차 제회

  5. configure(HttpSecurity http)인터셉터로 http 요청을 안전하게 보호하는 방법 설정
  • authorizeRequests()
    요청 경로에 따라 접근 권한 설정
authorizeRequests()  요청 경로 URL 패턴 지정
permitAll()  모든 사용자에게 접근 허용
authenticated()  인증된 사용자에게만 접근 허용
anonymous()  인증되지 않은 사용자에게만 접근 허용
denyAll()  모든 사용자 접근 금지
hasRole()  특정 권한을 가진 사용자만 접근
  • formLogin()
    로그인에 대한 설정
loginPage(URL) 로그인 페이지 경로
successHandler(성공 커스텀 핸들러) 로그인 성공시 핸들러
failureHandler(실패 커스텀 핸들러) 로그인 실패 시 핸들러
  • logout()
    로그아웃에 대한 설정
logoutUrl(URL) 로그아웃 경로 설정
logoutRequestMatcher( new AntPathRequestMatcher(경로) ) 로그아웃 경로 설정
logoutSuccessUrl() 로그아웃 성공 시 이동할 경로
invalidateHttpSession() 로그아웃 성공 시 세션 제거

 

* logout()과 csrf 사용 시 POST 요청을 통해 logout 해야함

 

6. configure(AuthenticationManagerBuilder auth)
     사용자 인증을 위한 로직 담당

 

 

728x90

'JAVA > SPRING' 카테고리의 다른 글

[WEB] RESTful API 만들기  (0) 2021.03.22
[JPA] 게시판 CRUD  (0) 2021.03.21
[SPRING SECURITY] 스프링 시큐리티란  (0) 2021.03.14
[SPRING BOOT] 디렉터리 구조  (0) 2021.03.13
[SPRING BOOT] 환경설정  (0) 2021.03.13

관련글 더보기

댓글 영역