이전글 https://greed-yb.tistory.com/223
SecurityConfig
package com.example.practice.security.config;
import com.example.practice.security.handler.WebAccessDeniedHandler;
import com.example.practice.security.handler.WebAuthenticationEntryPoint;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
// @EnableWebSecurity는 모든 요청 URL이 스프링 시큐리티의 제어를 받도록 만드는 애너테이션이다.
// @Configuration은 스프링의 환경설정 파일임을 의미하는 애너테이션이다. 여기서는 스프링 시큐리티의 설정을 위해 사용되었다.
@EnableWebSecurity
@Configuration
public class WebSecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// @EnableWebSecurity 이 csrf 공격을 방지하기 때문에 해당 기능을 disable로 변경
http.csrf().disable();
http
.authorizeRequests()
// 권한체크 - 내부적으로 ROLE_ 을 붙이기 때문에 ROLE_ 뒷부분만 적어준다 (USER 권한)
.requestMatchers("/").hasRole("USER")
// 권한체크 - 내부적으로 ROLE_ 을 붙이기 때문에 ROLE_ 뒷부분만 적어준다 (ADMIN 권한)
.requestMatchers("/board/create").hasAnyRole("ADMIN")
// 해당 경로는 권한이 없어도 접속할 수 있다
.requestMatchers("/bootstrap/**", "/login", "/signup", "/logout").permitAll()
.anyRequest().authenticated();
// 로그인(설정하지 않으면 기본 login page를 사용하게 됨
http
.formLogin()
.loginPage("/login") // 로그인 페이지 지정 지정
.loginProcessingUrl("/login") // 로그인 처리 URL 지정
.usernameParameter("id") // form의 id 변수 명
.passwordParameter("password") // form의 패스워드 변수 명
.defaultSuccessUrl("/"); // 로그인 성공시 이동할 주소
// 로그아웃
http
.logout()
.logoutUrl("/logout") // 로그아웃 url
.logoutSuccessUrl("/") // 로그아웃 성공시 /로 이동
.invalidateHttpSession(true); // 인증정보 삭제 세션 무효화
// exception 처리
http
.exceptionHandling()
// 인가 권한이 없는 사용자 접근 시
.accessDeniedHandler(new WebAccessDeniedHandler())
// 인증되지 않은 사용자 접근 시
.authenticationEntryPoint(new WebAuthenticationEntryPoint());
return http.build();
}
}
'개발 > Security' 카테고리의 다른 글
[SpringBoot] Security 로그인 인증, 인가(6) - Service (0) | 2023.04.30 |
---|---|
[SpringBoot] Security 로그인 인증, 인가(5) - Vo , Mapper (0) | 2023.04.30 |
[SpringBoot] Security 로그인 인증, 인가(4) - AuthProvider (0) | 2023.04.30 |
[SpringBoot] Security 로그인 인증, 인가(3) - handler (0) | 2023.04.30 |
[SpringBoot] Security 로그인 인증, 인가(1) - 환경설정 (1) | 2023.04.30 |
댓글