SecurityConfig.java
@Configuration
스프링 시큐리티에 관련된 기본적인 사항들(인증필터 등)이 설정된다.
@EnableWebSecurity
WebSecurityConfigurerAdapter를 상속하면 이미 설정된 기본값에 추가값을 오버라이드해 설정할 수 있다.
//특정 요청에 대해서는 시큐리티 설정을 무시하도록 하는 등 전체에 관한 설정을 한다
@Override
public void configure(WebSecurity web) throws Exception {
//static files
//webjars, resources와 같은 정적 저장소에 접근하면 시큐리티 설정을 무시하도록 한다 .
web.ignoring().antMatchers("/resources/**","/webjars/**");
}
//configure 메서드 오버라이드 후 인가, 로그인, 로그아웃을 설정한다
@Override
protected void configure(HttpSecurity http) throws Exception {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
http.headers().frameOptions().disable();
http.addFilterBefore(filter, CsrfFilter.class)
//인가 관련 설정하기
.authorizeRequests()
//permitAll: 모든 사용자가 접속할 수 있게한다.
.antMatchers("/admin").permitAll()
//그 외 경로로는 인증없이 이동할 수 없도록 설정한다.
.anyRequest().authenticated();
//로그인 관련 설정하기
//폼 인증처리 유효화, 인증처리 경로 설정
http.formLogin()
//로그인처리 경로
.loginProcessingUrl("/login")
//로그인 폼 표시 경로
.loginPage("/loginForm")
//인증에 실패했을 때 경로
.failureUrl("/loginForm?error")
//인증에 성공햤을 때 넘어가는 곳
.defaultSuccessUrl("/customers", true)
//사용자 이름과 암호 관련 파라미터 이름 설정
.usernameParameter("username").passwordParameter("password")
.and();
//로그아웃 관련 설정
//AntPathRequestMatcher 클래스를 사용하지 않고 문자열 경로를 지정했을 때, 로그아웃은 POST로 접속해야 한다.
http.logout()
//로그아웃 처리 경로
.logoutRequestMatcher(new AntPathRequestMatcher("/logout**"))
//로그아웃이 처리됐을 때 넘어갈 곳 설정한다.
.logoutSuccessUrl("/loginForm");
}
@Configuration
//GlobalAuthenticationConfigurerAdapter를 상속한 클래스에서 인증 처리에 관련된 사항들을 설정
static class AuthenticationConfiguration extends GlobalAuthenticationConfigurerAdapter {
@Autowired
UserDetailService userDetailService;
@Bean
//암호를 해시 형식으로 만들기 위한 클래스
PasswordEncoder passwordEncoder() {
//어떤 해싱 알고리즘을 사용할건지 결정
return new BCryptPasswordEncoder();
}
@Override
//인증 처리 관련 설정을 한다.
public void init(AuthenticationManagerBuilder auth) throws Exception {
//이 부분에서는 인증 처리를 위해 사용자를 가져오는 userDetailsService와
//암호를 대조할 때 사용하는 passwordEncoder를 설정한다.
auth.userDetailsService(userAuthService);
.passwordEncoder(passwordEncoder());
}
}
'ICT Intern > Spring Security' 카테고리의 다른 글
[Spring] Spring Security 메세지 커스터마이징 (0) | 2019.04.11 |
---|---|
[Spring] Spring Security 기본 개념 정리 (0) | 2019.04.10 |
[Spring] Thymeleaf 알아보기 (0) | 2019.04.09 |
[Spring] Spring Security 로그인 커스터마이징 (0) | 2019.04.09 |
[Spring] Spring Security 암호화 (0) | 2019.04.09 |