@Configuration // IoC 빈(bean)을 등록
@EnableWebSecurity // 필터 체인 관리 시작 어노테이션
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/user/**").authenticated()
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_USER')")
//.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN') and hasRole('ROLE_USER')")
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/loginProc")
.defaultSuccessUrl("/");
}
}
해당 코드는 spring security를 사용하여 웹의 보안 구성을 정의하는 메소드인 configure(HttpSecurity http) 를 재정의 하는 예제이다. 이 메소드는 spring Security의 'HttpSecurity' 객체를 통해 웹 보안 설정을 구성한다.
http.csrf().disable();
- 이 라인은 CSRF 공격 방지를 비활성화하는 설정이다.
- 이 설정을 통해 CSRF 토큰을 사용하지 않고 요청을 처리할 수 있으며 주의할 점은 보안이 약해질 수 있다.
(아마 공부용 예제이니 편의를 위해 비활성화한 것이 아닐까 싶다.)
http.authorizeRequests()
- 해당 메소드는 요청에 대한 접근 권한을 구현하는데 사용된다.
이 메소드를 호출한 뒤에 여러 개의 antMetchers() 메소드 호출로 웹 경로별로 접근 권한을 설정할 수 있다.
.antMatchers("/user/**").authenticated()
- "/user" 경로에 대한 요청은 인증된(로그인한) 사용자에게만 허용된다.
다시 말해, "/user" 경로에 접근하려면 로그인을 해야한다.
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_USER')")
- "/admin" 경로에 대한 요청은 "ROLE_ADMIN" 역할을 가진 사용자나 "ROLE_USER" 역할 증 하나를 가진 사용자에게 접근을 허용한다.
.anyRequest().permitAll():
- 이 규칙은 나머지 모든 요청에 대해 접근을 허용한다.
즉, "/user"와 "/admin" 를 제외한 모든 요청에 대해 접근이 허용된다.
.and()
- 여러 개의 보안 설정을 연결하는 데 사용된다.
.loginPage("/login")
.loginProcessingUrl("/loginProc")
.defaultSuccessUrl("/");
- 폼 기반 로그인을 구성한다.
- .loginPage("/login") : 로그인 페이지의 URL을 지정한다.
- .loginProcessingUrl("/loginProc") : 로그인을 처리할 URL을 지정한다.
- .defaultSuccessUrl("/"); : 로그인 성공 시 리다이렉트할 기본 URL을 지정한다.
<< 실행 시켜보기 >>
403 에러는 권한 부족 에러이다. "/admin" 으로 요청했을 때 성공적으로 오류를 발생시켰으니 성공~
요청을 보면 "/login" 으로 되어있지만 "/admin"으로 요청했을 때의 화면이다.
'개발공부 > spring security & JWT 강의' 카테고리의 다른 글
[6강] 구글 로그인 준비 (0) | 2023.09.22 |
---|---|
[5강] 메소드 단위로 권한 설정하기 - @Secured (0) | 2023.09.21 |
[4강] 스프링 시큐리티 로그인 구현 - '?error' 발생 (0) | 2023.09.20 |
[3강][4강] spring security 회원가입/로그인 (1) | 2023.09.16 |
[1강] spring security 환경설정 &⭐새로운 사실 (0) | 2023.09.15 |