새소식

반응형
Java/Spring

Spring Security Config 설정

  • -
반응형

Spring Security 를 사용하여 Config 설정을 하는데 간단한 설정만으로도 로그인/로그아웃 등의 처리가 가능하다.

URL에 대한 접근 권한 설정, 인증 전체 흐름에 필요한 로그인/로그아웃 페이지 설정, csrf 등 모든 설정을 간단한 방법으로 가능하다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
    @Override
    public void configure(HttpSecurity http) throws Exception {
    http
         // 페이지 권한 설정
         .authorizeRequests()
         .antMatchers(
                    "/",
                    "/error",
                    "/static/**",
                    "/auth/**",
                    "/common/callEnd",
                    "/api/exception/**",
                    "/api/internal/**",
                    "/api/wms/internal/**",
                    "/test/**"
          ).permitAll() //securityFilter 제외 url
    .anyRequest().authenticated() //permitAll외 모든 경로는 인증이 필요
    .and() 
    .formLogin().disable()
    .logout()
    .logoutRequestMatcher(new AntPathRequestMatcher("/user/logout"))
    .addLogoutHandler(logoutAddHandler())
    .logoutSuccessHandler(logoutSuccessHandler())
    .invalidateHttpSession(true)
    .and()
    .csrf().ignoringAntMatchers(SecurityConstants.LOGIN_PROCESS_URI)
    .and()
    .exceptionHandling()
    .accessDeniedHandler(accessDeniedHandler())
    .authenticationEntryPoint(enrtyPointHandler())
    .and()
             .headers().frameOptions().sameOrigin()//헤더 same origin설정
     .and()
     .sessionManagement()
        .maximumSessions(1)
        .expiredUrl(SecurityConstants.CALL_END_URI);
    }
}
  • @Configuration
    • 해당 클래스를 Java Bean 으로 등록하기 위한 어노테이션
  • @EnableWebSecurity
    • @Configuration 에 @EnableWebSecurity 어노테이션을 설정하면 Spring Security를 설정할 클래스라는걸 명시
  • configure(HttpSecurity http)
    • HttpSecurity 를 통해 HTTP 요청에 대한 웹 기반 보안을 구성할 수 있다.
    • authorizeRequests()
      • HttpServletRequest에 따라 접근(access)을 제한하고 검사한다.
      • antMatchers() 메서드로 특정 경로(URL)를 지정한다.
      • permitAll() : permitAll() 메서드로 설정된 URL 접근은 인증절차 없이 허용한다.
      • hasRole() : antMatchers()와 함께 사용하며 설정된 URL에 대한 접근 권한을 설정한다.
      • anyRequest().authenticated() : permitAll() 등 특정 권한 및 인증 절차가 필요없는 URL을 제외하고 모든                                                            URL은 무조건 인증을 완료해야 접근이 가능하다는 의미

 

.formLogin()
        .loginPage("/user/login")
        .defaultSuccessUrl("/user/login/success")
        .permitAll()

//로그인 api
@RequestMapping(value="/user/login")
public String userLogin(){
    return "login";
}

//로그인 page (login.html)
...생략
<form action="/user/login" method="post">
    ...id 와 password를 입력할 input 태그
    <button type="submit">로그인</button>
</form>
  • formLogin()
    • form 기반으로 인증을 한다. 로그인 정보는 기본적으로 HttpSession을 이용합니다.
    • loginPage("/user/login")
      • Spring Security 에서 제공하는 기본 form 말고  커스텀 로그인 페이지를 사용하고 싶으면 loginPage()를      설정해야 한다. 또한 /user/login api 요청에서 로그인 페이지를 return 하는데 해당 로그인 페이지에서의 form 태그의 action 과 일치해야한다. action 태그의 url과 loginPage()의 url이 일치해야 submit을 통해 인증 시도
    • defaultSuccessUrl("/user/login/success")
      • form 태그의 action을 통해 로그인을 시도하고 성공했을 때 이동되는 페이지이다. 해당 URL은 컨트롤러에   URL 매핑이 추가되어 있어야 한다.

 

 

.logout()
    .logoutRequestMatcher(new AntPathRequestMatcher("/user/logout"))
    .addLogoutHandler(logoutAddHandler())
    .logoutSuccessHandler(logoutSuccessHandler())
    .invalidateHttpSession(true)
  • logout()
    • 로그아웃을 설정하는 메서드이며, WebSecurityCOnfigurerAdapter를 사용할 때 자동으로 적용된다.
    • 기본적으로 설정을 안하면 "/logout"으로 접근할 시 HTTP 세션을 자동으로 제거한다.
    • logoutRequestMatcher(new AntPathRequestMatcher("/user/logout"))
      • Spring Security 로그아웃의 기본 URL("logout")이 아닌 다른 URL 로 재정의한다.
      • "/user/logout" 으로 재정의하며 마찬가지로 컨트롤러에 URL 매핑 설정이 되어있어야 한다.
    • logoutSuccessHandler()
      • 로그아웃에 대한 핸들러 설정
    • invalidateHttpSession(true)
      • HTTP 세션을 초기화하는 작업이다.
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.