[Spring] core2 - security

호호빵·2022년 6월 21일
0

Spring

목록 보기
7/24

웹 인증과 인가

인증(Authentication) : 사용자 신원을 확인하는 행위
인가(Authorization) : 사용자 권한을 확인하는 행위

웹에서 인증, 인가

인증 : 로그인을 통해 본인임을 확인(주로 아이디,패스워드 이용)
인가 : 주고 역할에 따른 사용 권한 관리(회원 등급에 따라)

쿠키와 세션

API

회원관리 기능 설계

기능MethodURLRequestResponse
회원 가입GET/user/signup-회원 가입 html
POST/user/signup회원 가입에 필요한 정보-
회원 로그인GET/user/login/-회원 로그인 html
POST/user/login/아이디, 패워-
회원 로그아웃GET/user/logout--

상품 등록 및 조회 API 설계

기능MethodURL설명
상품 등록(회원별)POST/api/products로그인 되어있는 회원별로 상품 등록
상품 조회(회원별)GET/api/products/로그인 되어있는 회원이 등록한 상품만 조회
상품 조회(관리자)GET/api/admin/products/모든 회원의 상품 조회

스프링 시큐리티

회원가입 UI 반영

회원가입 기능 구현

DB에 저장할 회원정보 Entity 설계
테이블 ID | ID | long

회원별 상품등록 및 조회

로그인한 회원정보 함께 저장

등록

# 기존 ProductController
// 신규 상품 등록
 @PostMapping("/api/products")
    public Product createProduct(@RequestBody ProductRequestDto requestDto) {
        Product product = productService.createProduct(requestDto);
     	return product;    // 응답 보내기
    }
    
# 로그인 정보 담음 
// 신규 상품 등록
  @PostMapping("/api/products")
  	public Product createProduct(@RequestBody ProductRequestDto requestDto, 
    							 @AuthenticationPrincipal UserDetailsImpl userDetails) {
        Long userId = userDetails.getUser().getId();     // 로그인 되어 있는 ID
        Product product = productService.createProduct(requestDto, userId);
        return product;    // 응답 보내기
    }
    
    
    
# 기존 ProductService
  @Transactional // 메소드 동작이 SQL 쿼리문임을 선언
    public Product createProduct(ProductRequestDto requestDto){
        Product product = new Product(requestDto);    // 요청받은 DTO 로 DB에 저장할 객체 만들기
        productRepository.save(product);
        return product;

# 로그인 정보 담음
	@Transactional // 메소드 동작이 SQL 쿼리문임을 선언합니다.
    public Product createProduct(ProductRequestDto requestDto, Long userId ) {
        // 요청받은 DTO 로 DB에 저장할 객체 만들기
        Product product = new Product(requestDto, userId);
        productRepository.save(product);
        return product;
    }
    
    
# 기존 Product에 추가
@Column(nullable = false)
private Long userId;

// 생성자에도 추가

조회

# 기존 ProductController
// 등록된 전체 상품 목록 조회
    @GetMapping("/api/products")
    public List<Product> getProducts() {
        List<Product> products = productService.getProducts();
        // 응답 보내기
        return products;
    }
# 로그인 정보
		// 로그인한 회원이 등록한 상품들 조회
    @GetMapping("/api/products")
    public List<Product> getProducts(@AuthenticationPrincipal UserDetailsImpl userDetails) {
        Long userId = userDetails.getUser().getId();
        return productService.getProducts(userId);
    }



# 기존 ProductService
 	public List<Product> getProducts() {
        return productRepository.findAll(); 
    }

# 로그인 정보
		// 회원 ID 로 등록된 모든 상품 조회
    public List<Product> getProducts(Long userId) {
        return productRepository.findAllByUserId(userId);
    }
    
    
# 기존 ProductRepository
public interface ProductRepository extends JpaRepository<Product, Long> {}

# 로그인정보 담아서
public interface ProductRepository extends JpaRepository<Product, Long> {
    List<Product> findAllByUserId(Long userId);
}

관리자

2-10강 16분 30초

profile
하루에 한 개념씩

0개의 댓글