Sparta/What I Learned

23.1.18

코딩하는 또롱이 2023. 1. 18. 23:13
프로젝트 3일차

 

 

구현해야 하는 필수 조건들 중 프로필 빼고는 거의 다 구현했다. 코드를 구현하면서

 

@PreAuthorize("hasRole('BUYER')")

 

요 놈을 새로 배웠다. 이놈은 우리가 이번에 구현할 홈페이지에서 BUYER 와 SELLER , ADMIN 이렇게 3개의 Enum을 구분해두었는데 특정 url에 저걸 걸어두면 BUYER가 아니면 작성, 수정, 삭제가 안되게 해둔다던지 SELLER가 아니면 목록 조회가 안되게끔 설정해 둘 수 있다. 

 

저 어노테이션을 쓰기 위해서는 WebSecurityConfig 부분에서

@EnableGlobalMethodSecurity(prePostEnabled = true)

이렇게 걸어줘야한다!!!

궁금해서 따로 더 찾아봤는데 권한을 줘서 사전에 차단 시키려면 @PreAuthorize를 걸어주면 되고 @PostAuthorize는 일단 url을 실행하고 난 다음에 권한을 검사하는 건데 이건 내가 구현하고픈게 뭔지에 따라 다르게 적용시키면 된다.

 

[내가 맡은 페이징 처리 코드]

리스트로 받아올 건데 Enum이 SELLER일때만 받아올 거고 이걸 스트림을 이용해 리스트로 반환해줄거다! 그리고 페이지를 초이스할 때 sort는 어떻게 할건지 뭘 기준으로 sort할 건지 따로 구분을 해뒀음!!!

public List<UserResponseDto> getAllSellers(int pageChoice) {
    Page<User> users = userRepository.findByRole(UserRoleEnum.SELLER, pageableSellersSetting(pageChoice));
    return users.stream().map(UserResponseDto::new).collect(Collectors.toList());

}

private Pageable pageableSellersSetting(int pageChoice) {
    Sort.Direction direction = Sort.Direction.ASC;
    Sort sort = Sort.by(direction, "username");
    return PageRequest.of(pageChoice - 1, 10, sort);
}

 

[조장님이 쓴 페이징 코드]

오잉 나는 Transactional 안 걸어 뒀는데도 잘 되지??? << 이건 내일 물어봐야지 

나랑 비슷한듯 조금 다르다. 리턴은 똑같은데 Pageable 객체를 만들어서 Setting을 따로 받게 짰음

ㅇㅣ렇게 하면 뭐가 다를까?? 이것도 내일 물어봐야지

Setting에는 사이즈 값을 포스트맨으로 받게끔 설정할 수 있게 해둔게 진짜 센스짱이다. 나는 10으로 고정해 둬서 목록이 제대로 확인되는지 보려면 상품 10개 넘게 만들어야했는뎈ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

@Transactional
public List<AdminPromoteShowResponseDto> getPromoteWaitBuyer(int page, int size){ 
    Pageable pageable = pageableSetting(page, size);
    Page<Promote> wait = promoteRepository.findAll(pageable);

    return wait.stream().map(AdminPromoteShowResponseDto::new).collect(Collectors.toList());
}

public Pageable pageableSetting(int page, int size){
Sort.Direction direction = Sort.Direction.ASC;
    Sort sort = Sort.by(direction, "id");
    return PageRequest.of(page-1, size, sort);
}

 

 

그리고 SELLER가 ORDER LIST 받아오는거 이거 진짜 ㅁㅊ듯,,,,, 너무 머리아파서 한시간 좀 넘게 조장님이랑 쥐어 짜냈는데 결국 구현 제대로 못하고 끝났따... 내일 다시 5명이서 머리 맞대고 짜봐야징,,,,

 

 

그리고 오늘 하루종일 깃배쉬 망할ㅅㄲ 때문에 진짜 머리 아팠다,,, 아침엔 다른 조원이 소리지르고,,, 나는 태평했는데(왜냐면 내가 쓴 코드는 살아있고 조장님 코드가 에러 투성이어서>.< 얏호!) 이게 진짜 말로 돌아왔다...... 간신히 페이징 다 구현해 놔서 판매자 목록이랑 판매 물품 목록 다 구현 해뒀는데 싸그리 날라가서 어제 코드만 남아 잇던 것이다😭😱

 

진짜,,,, 그래도 한 번 짰었다고 오래 걸리진 않았지만,,, 조장님이랑 코드윗미 하면서 이거 이렇게 했었나요? 이거 이게 맞나요? 계속 물어보고 포스트맨 계속 돌리고,,, 403 뜨고 ,,,, 진짜 흑흑 죽고시퍼따,,,,, 그래도 결국 끝까지 내가 해냄!!!

 

그나저나 잘하는 두 분과 함께 코드 윗 미로 코드리뷰 하면서 내가 잘못 생각한거 실시간으로 피드백 받으니까 진짜 너무 좋다....❣️ 

알려준 1ㅂ2님 ㄱㅅㅎㄴㄷ(제리짤)

 


 

오늘의 링크

[PreAuthorize & PostAuthorize]

 

Spring Security @PreAuthorize @Secured 사용법

Spring Security에서의 권한 별 접근은 아래 source 처럼 대부분 configure(HttpSecurity http)에 설정을 하여 관리를 하게 됩니다. @Override protected void configure(HttpSecurity http) throws Exception { http.httpBasic().and().author

copycoding.tistory.com

 

[프로필 이미지를 어떻게 구현하지,,,?]

 

스프링부트 커뮤니티 API 서버 만들기 #4 - 지옥의 Board API 만들기, 게시판 CRUD + 이미지 업로드

스프링부트 커뮤니티 API 서버 만들기 #4 지옥의 Board API 만들기, 게시판 CRUD + 이미지 업로...

blog.naver.com

 

 

 

Spring Boot 파일 업로드 및 테스트(multipart/form-data)

스프링부트에서 파일과 데이터를 업로드하고, 테스트하는 방법에 대해서 간략히 정리해보겠습니다. 단순히 컨트롤러 단에서 요청을 어떻게 받고, 어떻게 테스트할 것인지에 대해서만 살펴보겠

kukekyakya.tistory.com

 

 

POSTMAN 포스트맨 이미지 업로드 에러

로컬호스트에서 API 테스트를 하기위해서 많이 사용되는 포스트맨 이미지를 업로드하여 테스트를 해보려하는데 다음과 같은 계속 에러가 발생하였다. [에러메시지] Couldn't upload file Make sure that Po

euuuuuz.tistory.com

 

 

[NULL 값이 나타난다면? lombok이랑 getter 네이밍 충돌 때문에 나타날수도 있으니까 참고하면 좋음]

 

Spring Request DTO 에 null 값이 들어가는 이유 (Jackson, Lombok)

Overview Spring Boot 로 REST API 를 테스트 하다가 이상한 이슈에 직면했습니다. 클라이언트에서 @RequestBody 로 요청을 받기 위한 DTO 클래스를 만들고 값을 입력 받았는데 null 값이 입력되는 겁니다. 처

bcp0109.tistory.com

 

'Sparta > What I Learned' 카테고리의 다른 글

23.1.20  (0) 2023.01.25
23.1.19  (0) 2023.01.19
23.1.17  (1) 2023.01.17
23.1.16  (0) 2023.01.17
23.1.15  (0) 2023.01.15