스프링 시큐리티는?
스프링 기반 애플리케이션의 인증과 권한을 담당하는 스프링의 하위 프레임워크이다.
- 인증(Authenticate)은 로그인을 의미한다.
- 권한(Authorize)은 인증된 사용자가 어떤 것을 할 수 있는지를 의미한다.
시큐리티 추가하기
추가 된 상태로 바로 서버를 실행해서 확인하면
이렇게 뜬다.
로그인 창을 출력한다.
시큐리티의 인증임
인증되지 않은 사용자는 서비스를 사용 할 수 없게 함
아이디는 user
콘솔에 뜨는 임시 패스워드로 로그인이 가능함
하지만 이 방법은 비 회원인 사람은 아무런 사용을 할 수 없으므로 설정을 바꿈
로그인 없이도 게시물을 조회할 수 있어야 함
SecurityConfig 클래스 생성
@Configuration은 스프링이 관리하는 @Bean설정을 할 수 있게 함
@EnableWebSecurity는 스프링 시큐리티의 설정
@Configuration은 스프링의 환경설정 파일임을 의미하는 애너테이션이다. 여기서는 스프링 시큐리티의 설정을 위해 사용되었다. @EnableWebSecurity는 모든 요청 URL이 스프링 시큐리티의 제어를 받도록 만드는 애너테이션이다.
package com.mysite.sbb;
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;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests().antMatchers("/**").permitAll();
return http.build();
}
}
f2를 눌러서 볼 수 있음. SecurityFilterChain을 사용해줄것
그리고 SecurityFilterChain 이름이 너무 길어서 filterChain으로 바꿈
이렇게 실행하면 아까와 같은 로그인 창은 뜨지 않는다.
하지만 시큐리티를 적용하면
h2-console에 connect 시 오류가 발생한다.
http://localhost:8080/h2-console
h2 403 에러가 나는데
스프링 시큐리티를 적용하면 CSRF 기능이 동작하기 때문임
위조 방지 기술임.
F12
서버로 요청이 왔을 때 폼 요청을 할 경우
-> 데이터 전달 시
타임리프 HTML에서는 th:action일 경우 CSRF가 자동 생성이 됨
만약에 th:action을 사용하지 않았다면 히든으로 만들어줘야함
위의 오류가 발생하는 h2-console에는
csrf 토큰이 없어서 잘못된 요청이라고 오류가 나는거임
스프링 시큐리티가 CSRF 처리시 H2 콘솔은 예외로 처리할 수 있도록
SecurityConfig을 수정한다.
package com.mysite.sbb;
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;
import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests().antMatchers("/**").permitAll()
.and()
.csrf().ignoringAntMatchers("/h2-console/**")
.and()
.headers()
.addHeaderWriter(new XFrameOptionsHeaderWriter(
XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))
;
return http.build();
}
}
정상적으로 h2가 로그인되는것을 확인 가능하다.
현재는 임시로 h2 db를 사용하고 있어서 사용하는 코드이지
나중에 MySql 연결해서 사용할 때는 삭제해버릴 코드임
'BACKEND > SpringBoot' 카테고리의 다른 글
로그인 구현 (0) | 2023.11.10 |
---|---|
회원가입 처리(유효성검사, 비밀번호 암호화, 중복회원가입처리) (0) | 2023.11.10 |
답변 개수 표시 (0) | 2023.11.09 |
게시물에 일련번호 추가하기 (0) | 2023.11.09 |
페이징 (0) | 2023.11.09 |