BCrypt 암호화 메서드

시큐리티 암호화

  • 스프링 시큐리티는 사용자가 로그인 할 때 비밀번호에 대해 암호화를 진행하여 DB 에 저장되어 있는 비밀번호와 대조를 한다. → 그러므로 비밀번호를 DB에 저장 할때에도 Hash 화 하여 저장 하여야 한다.
  • 스프링 시큐리티는 암호화를 위해 BCrpt PasswordEncoder 를 제공하고 권장한다.

Security Config 암호화 Bean 추가

@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
    // 클래스를 임폴트 해오기    메서드 명 사용
    return new BCryptPasswordEncoder();
    // 새로운 객체로 return 하기 
}

 

해당 정리 내용은 유튜버 개발자 유미님 영상을 보고 정리한 내용 입니다.

좋은 무료 강의가 많아서 다들 한번 방문해보시는걸 추천드려요.

 

 

개발자 유미

백엔드 개발자 유미 - 실습 위주 진행 (개념적인 부분은 공식 Docs 참조 및 개인 학습 바랍니다!) - 간혹 댓글 알림이 안오는 경우가 있습니다.

www.youtube.com

 

Security Config 클래스

  • 인가ex ) 1. 해당 경로 접근은 누구에게 열려 있는지?
    1. 로그인이 완료된 사용자 인지?
    2. 해당되는 규칙을 갖고 있는지?
  • → 특정 경로에 요청이 오면 Controller 에 도달하기 전 필터 단계 에서 Spring Security 가 검증 함

프로젝트 구조

  1. 처음 spring 프로젝트를 생성하면 모든 페이지에 로그인해야만 접속이 가능한 상태 이다.
  2. src → main → java → com.프로젝트명 하위에 comfig 패키지를 생성해준다.
  3. config 패키지 내부에 SecurityConfig 라는 java class 파일을 만들어 준다.
package com.example.studysecurity240402.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.web.SecurityFilterChain;

@Configuration // <- 스프링 부트 에서 config 파일 인식 시키는 기능
@EnableWebSecurity // <- 시큐리티 기능을 활성화 하고 웹 보안 구성을 시작할 수 있다.
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    //     인터페이스의 메서드를 사용           인자로 해당 타입 받기    예외처리

        // 이제 내부에 어떤 경로에 요청이 왔을때에 어떤 응답을 해줄지 설정 해주면 된다.
        // 작성방식은 람다식으로 해주면 된다.
        http.authorizeHttpRequests((auth) -> auth
                .requestMatchers("/","login").permitAll()
                // 특정 경로에 요청을 넣고 싶을때 사용
                .requestMatchers("/admin").hasRole("ADMIN")
                .requestMatchers("/my/**").hasAnyRole("ADMIN","USER")
                .anyRequest().authenticated()
        );
        return http.build(); // http 데이터를 받은 것을 build 로 리턴 해야한다.
    }
}

  • permitAll → 모든 사용자에게 오픈
  • hasRole → 특정 규칙이 있어야 접근 가능 (admin 인지 manager 인지)
  • authenricated → 로그인 해야만 접근 가능
  • denyAll → 모든 사용자의 접근 막기

해당 정리 내용은 유튜버 개발자 유미님 영상을 보고 정리한 내용 입니다.

좋은 무료 강의가 많아서 다들 한번 방문해보시는걸 추천드려요.

 

 

개발자 유미

백엔드 개발자 유미 - 실습 위주 진행 (개념적인 부분은 공식 Docs 참조 및 개인 학습 바랍니다!) - 간혹 댓글 알림이 안오는 경우가 있습니다.

www.youtube.com

 

1. 실습 목표 및 간단한 동작 원리

실습 목표

스프링 시큐리티 프레임워크를 활용하여 인증 / 인가 구현 및 회원 정보 저장은 MariaDB 데이터베이스를 활용하여 구현

  • 인증 : 로그인
  • 인가 : 경로 별 접근 권한
  • 회원 가입

 

스프링 시큐리티의 동작 원리

  • 원래의 방식
    1. 스프링 부트 프로젝트는 Servlet Container 인 Tomcat Container 위에 존재하게 되는데
    2. 클라이언트 로 부터 요청이 들어오게 되면 → Servlet Container 가 요청을 받게 되고
    3. Servlet Container 의 필터를 거친 후에 Spring Boot 프로젝트에 도달 하게 된다.
  • 시큐리티 방식
    1. Spring Security Config 라는 Java Config 파일을 프로젝트에 등록해 두면
    2. Config 파일이 Servlet Container 의 필터에 특정 필터를 생성하고
    3. Client 로 부터 들어온 요청을 가로 채게 된다.
    4. 가로챈 요청을 어떤 Spring Boot 의 기능을 원하는지, 어떤 권한을 갖는지 Config 파일이 분석하고,
    5. 해당 권한에 맞게 Config 가 작동하게 된다.

 

프로젝트에서 사용할 버전 → 강사님 이랑 DB는 다른 걸 사용

  • Spring Boot 3.2.4
  • Security 6.2.3 → spring boot 버전에 따라 최신 버전으로 받아진다.
  • Spring Data JPA 3.2.4 (DB에 날릴 쿼리) → spring boot 버전에 따라 최신 버전으로 받아진다.
  • MariaDB 10.11.7 (DB)
  • mustache (view 영역) → → spring boot 버전에 따라 최신 버전으로 받아진다.

2. 프로젝트 생성

해당 프로젝트의 요구 의존성

  • Spring Web → springBoot web 기능
  • Lombok → getter, setter 를 자동으로 해주는 기능
  • Mustache → view 영역을 담당해주는 기능
  • Spring Security → 보안 기능
  • Spring Data JPA → jpa 로 쿼리 날리기
  • MariaDB → 회원 정보 저장 하는db

 

해당 정리 내용은 유튜버 개발자 유미님 영상을 보고 정리한 내용 입니다.

좋은 무료 강의가 많아서 다들 한번 방문해보시는걸 추천드려요.

 

 

개발자 유미

백엔드 개발자 유미 - 실습 위주 진행 (개념적인 부분은 공식 Docs 참조 및 개인 학습 바랍니다!) - 간혹 댓글 알림이 안오는 경우가 있습니다.

www.youtube.com

 

국비 수료후 spring boot 는 배웠는데 security 를 배우지 않아 답답한 마음이 가득했는데

좋은 강의를 찾게 되어 정리한 글 목록 입니다.

 

해당 정리 내용은 유튜버 개발자 유미님 영상을 보고 정리한 내용 입니다.

좋은 무료 강의가 많아서 다들 한번 방문해보시는걸 추천드려요.

 

 

개발자 유미

백엔드 개발자 유미 - 실습 위주 진행 (개념적인 부분은 공식 Docs 참조 및 개인 학습 바랍니다!) - 간혹 댓글 알림이 안오는 경우가 있습니다.

www.youtube.com

 

+ Recent posts