본문 바로가기
Spring Security

Spring Security -HttpSecurity

by setung 2021. 11. 30.

HttpSecurity는 인증, 인가의 세부적인 기능을 설정할 수 있도록 API를 제공해주는 클래스이다.

WebSecurityConfigurerAdapter를 상속하여 configure(HttpSecurity http) 메서드를 오버라이드 해 설정한다.

@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {

    }
}

 

 

formLogin

http.formLogin()은 form을 통한 로그인 방식에 대해 설정을 한다.

@Override
    protected void configure(HttpSecurity http) throws Exception {

        http.formLogin()
            .loginPage("")                                        // 사용자 정의 로그인 페이지
            .defaultSuccessUrl("")                                // 로그인 성공 후 이동 페이지
            .failureUrl("")                                       // 로그인 실패 후 이동 페이지
            .usernameParameter("")                                // 아이디 파라미터명 설정
            .passwordParameter("")                                // 패스워드 파라미터명 설정
            .loginProcessingUrl("")                               // 로그인 Form Action Url
            .successHandler((request, response, authentication) -> {}) // 로그인 성공 후 핸들러
            .failureHandler((request, response, exception) -> {});     // 로그인 실패 후 핸들러
    }

 

 

logout

http.logout()은 로그아웃에 대한 설정을 한다.

http.logout()
    .logoutUrl("")                                                    // 로그아웃 처리 URL
    .logoutSuccessUrl("")                                             // 로그아웃 성공 후 이동페이지
    .deleteCookies("")                                                // 로그아웃 후 쿠키 삭제
    .addLogoutHandler((request, response, authentication) -> {})      // 로그아웃 핸들러
    .logoutSuccessHandler((request, response, authentication) -> {}); // 로그아웃 성공 후 핸들러

 

 

rememberMe

http.rememberMe()란 로그인한 유저의 SessionId가 서버에서 만료가 되었더라도, remember-me 쿠키값이 유효하면 로그인을 유지시켜주는 기능이다.

http.rememberMe()
        .rememberMeParameter("remember")      // 기본 파라미터명은 remember-me
        .tokenValiditySeconds(3600)           // Default 는 14일
        .alwaysRemember(true);                // 리멤버 미 기능이 활성화되지 않아도 항상 실행

 

 

sessionManagement

http.sessionManagement()는 세션을 설정한다.

두 번째 설정인 동시 로그인 차단은 세션 허용 범위를 넘어섰을 때 로그인 시도 시 로그인 처리를 차단한다.

기존 세션 만료란 세션 허용 범위를 넘어섰을 때 로그인 시도 시 기존의 세션을 만료시키고 로그인을 진행한다.

http.sessionManagement()
        .maximumSessions(1)                // 최대 허용 가능 세션 수 , -1 : 무제한 로그인 세션 허용
        .maxSessionsPreventsLogin(true)    // true 동시 로그인 차단, false 기존 세션 만료
        .expiredUrl("/expired");           // 세션이 만료된 경우 이동 할 페이지

 

http.sessionManagement().sessionFixation()
                .changeSessionId();

해커가  어떤 유저의 SESSION ID를 가지고 있다면, 유저가 로그인했을 시 해커는 유저의 계정으로 로그인이 가능하게 된다.  

changeSessionId()는 인증 성공 시 SESSION ID를 변경함으로써 해커가 가지고 있는 SESSION ID를 무용지물로 만든다.

 

 

authorizeRequests

접근하는 url에 따라 인가를 설정한다.

http.authorizeRequests()
     .antMatchers("").authenticated()      //인증된 사용자의 접근을 허용
     .antMatchers("").fullyAuthenticated() //인증된 사용자의 접근을 허용, rememberMe 인증 제외
     .antMatchers("").permitAll()          //무조건 접근을 허용
     .antMatchers("").denyAll()            //무조건 접근을 허용하지 않음
     .antMatchers("").anonymous()          //익명사용자의 접근을 허용
     .antMatchers("").rememberMe()         //기억하기를 통해 인증된 사용자의 접근을 허용
     .antMatchers().access("")             //주어진 SpEL 표현식의 평가 결과가 true이면 접근을 허용
     .antMatchers("").hasRole("")          //사용자가 주어진 역할이 있다면 접근을 허용
     .antMatchers("").hasAuthority("")     //사용자가 주어진 권한이 있다면 접근 허용
     .antMatchers("").hasAnyAuthority("")  //사용자가 주어진 권한 중 어떤 것이라도 있다면 접근을 허용
     .antMatchers("").hasAnyRole()         //사용자가 주어진 권한이 있다면 접근을 허용
     .antMatchers("").hasIpAddress("");    //주어진 IP로부터 요청이 왔다면 접근을 허용

 

csrf

csrf 설정은 서버에 요청 시 서버에서 발급해준 토큰을 HTTP 파라미터로 보냄으로써 보안을 강화하는 기능이다.

http.csrf();
http.csrf().disable();

댓글