
빈이 써진 코드들 중 일부.
공부해야 할 것.
저번달과 이번달에 배운 람다와 체이닝이 쓰였는데
이미 import된 메서드도 포함되어 있어서 공부해야 한다.
22일부터 FE를 배운다고 하니 여기까지가 BE로 예상.
여기선 구현하고 외울것 외에 이해를 해야 하는데 암호화 알고리즘을 더 이해하는게 좋은지 소스별로 이해하는게 좋은지 약간 컨퓨징.
뼈대를 외워야 한다.
package com.example.boardapp.config;
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.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
@Configuration //이 클래스를 설정(Configuration)파일 클래스로 지정합니다.
@EnableWebSecurity //시큐리티용 설정파일로 지정합니다.
public class SecurityConfig //성벽임 - 시큐리티 설정 클래스, 시큐리티 : 인증/인가((예를 들어 로그인)) 및 보안 담당
{
//비밀번호 암호화를 처리하는 객체를 처리하는 객체(password encoder)를 빈(bean)으로 등록하는 과정
@Bean //@Bean : 이 메서드(PasswordEncoder)가 반환하는 객체를 빈으로 등록합니다.
public PasswordEncoder PasswordEncoder()
{
//BCrypt : 암호화 알고리즘
return new BCryptPasswordEncoder(); //BCryptPassword: PasswordEncoder (인터페이스)의 구현 클래스
}
//필터 제안(인증, 인가 및 보안을 처리하는 필터들)
@Bean //throws : 이 메서드에서 발생한 예외를 상위 메서드에게 전가합니다.
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception
{
//http 요청(http request)에 대해서 접근 권한을 부여하는 절차를 시작합니다.
http
.authorizeHttpRequests(auth->auth
//member/join, /member/login은 누구나 접근 가능합니다.
//permit(허가한다)
.requestMatchers("/member/join", "/member/login").permitAll()
//나머지 요청은 인증(로그인)이 필요하다.
.anyRequest().authenticated())
//폼 로그인(아이디/비밀번호)의 기본 설정 <> OAuth 로그인, jmt 로그인
.formLogin(form->form
//로그인 페이지의 주소를 저장합니다.
.loginPage("/member/login")
//로그인 처리 주소
.loginProcessingUrl("/member/login")
//로그인에 성공한 경우 이동할 주소, 게시물 목록 페이지(/posts)로 이동시킵니다.
.defaultSuccessUrl("/posts", true)
.permitAll())
//로그아웃 설정
.logout(logout->logout
//로그아웃 요청 주소 (로그아웃 버튼을 누르면 이 주소를 요청하도록 만듭니다. )
.logoutUrl("/member/logout")
//로그아웃에 성공한 경우 이동시킬 페이지
.logoutSuccessUrl("/member/login")
//로그아웃을 하면 세션(인증 상태)을 무효화 합니다.
.invalidateHttpSession(true));
return http.build();
}
}