Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

7주차 : 보안 #86

Open
wants to merge 30 commits into
base: tmxhsk99
Choose a base branch
from

Conversation

tmxhsk99
Copy link

안녕하세요!
일단 올리고 시간 날 때 진행하도록 하겠습니다
어제 실제로 뵈서 반가웠습니다!
감사합니다!

Copy link
Contributor

@hannut91 hannut91 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

만나서 반가웠습니다 ㅎㅎ 여기서 또 뵙네용

configureAuthorizations(http);

http
.csrf().disable()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기서 csrf는 왜 disable하는지 이번 기회에 알아보면 좋습니다

.addFilterBefore(authenticationErrorFilter,
JwtAuthenticationFilter.class)
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기서 stateless가 어떤 의미인지 이번기회에 알아보면 좋습니다. 특히 REST API의 특성도 같이 공부하면 좋아요

.requestMatchers(this::matchesDeleteUserRequest).authenticated();
}
/**
* POST /products or /products/{상품아이디} 요청에 대해서만 인증을 요구합니다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이건 코드를 그대로 풀어서 쓴 것 같아요. 코드가 변경되면 주석이 바로 영향이 받습니다. 코드를 변경했는데 실수로 주석을 수정하지 않으면 큰 혼돈이 올거예요.

코드의 내용을 그대로 주석에 표현하여 해당 주석 삭제
Comment on lines 62 to 67
/**
* POST /products or /products/{상품아이디} 요청에 대해서만 인증을 요구합니다.
* @param req
* @return
*/

private boolean matchesPostProductRequest(HttpServletRequest req) {
return req.getMethod().equals("POST") &&
(req.getRequestURI().matches("^/products$") ||
req.getRequestURI().matches("^/products/[0-9]+$"));
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주석이 불필요하다기 보다는 여기서 하는 일을 더 설명해주면 좋을 것 같아요.
음... 요청이 상품 생성 요청인지 확인합니다 라고 할 수도 있고
조금 더 자세하게 얘기해서 Javadoc처럼 쓰면
요청이 상품 생성 요청이면 true를, 아니라면 false를 반환합니다.
요렇게 할 수도 있을 것 같아요.

implementation 'org.springframework.boot:spring-boot-starter-security'

// Spring AOP
implementation 'org.springframework:spring-aop'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AOP를 사용하셨군요. 팀원들이랑 협업한다고 가정했을 때, 이러한 기술 도입에 대해서 충분한 설명이 있어야 될 것 같아요.
만약에 팀원들에게 이 기술 도입에 대해서 설득하려고 할 때 뭐라고 하는게 좋을까요?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

일단 현재 상황을 도입 할 만한 상황인지 고려합니다
프로젝트 일정 및 현재 팀원들의 기술수준이 해당 기술을 소화할만큼의 역량이 되는지
팀원들이 긍정적으로 받아들일 사람인지도 고려합니다.
만약에 프로젝트 일정이 충분하고 팀원들의 상태도
해당기술을 사용할 역량 혹은 긍정적으로 받아들일 여부가 된다면
이런 권한 체크에 관한 로직같은경우 비즈니스로직에 공통으로 필요하지만
해당 기능자체가 핵심 비즈니스로직은 아니니 비즈니스로직은 비즈니스로직만 볼수 있게
AOP를 써서 분리하자고 이야기합니다.
그리고 동시에 관련 지식 혹은
실제 적용할 AOP 코드 부분을 현재 적용하려면 이렇게 적용할것이다 및 주의점을 문서로 작성하여 배포합니다
그리고 커피도 한잔씩 사줍니다

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사람과 사람과의 관계가 더 중요하다고 생각하시는군요 ㅎㅎ 저도 동의합니다

@tmxhsk99
Copy link
Author

tmxhsk99 commented Aug 19, 2023

안녕하세요
원래 기존의 컨트롤러에 AOP 권한 테스트도 같이 넣으려고 했는데
관련 객체 의존성 넣고 MockBean도 넣어보고
여러 시도를 해보았는데 아예 AOP 로직을 안 타더라구요...
그래서 그냥 결국 @SpringbootTest 붙이고 해당 테스트는 테스트DB를 보게 만들어서 테스트하였습니다.
혹시 좀더 나은방법이 있는데 제가 찾지 못한걸까요?
질문드립니다!

@hannut91
Copy link
Contributor

음... 일단 몇가지 시도는 해보았는데요.

@WebMvcTest(ProductController.class)
@Import({SecurityJavaConfig.class, JwtUtil.class, OwnerCheckAspect.class})
@EnableAspectJAutoProxy

이런식으로 하면 일단 AOP가 실행된다는 것은 확인했습니다.

그런데 테스트에서 이렇게 @EnableAspectJAutoProxy를 사용해도 되는건지, 어떻게 동작하는건지는 저도 아직 파악을 못했어요

@tmxhsk99
Copy link
Author

음... 일단 몇가지 시도는 해보았는데요.

@WebMvcTest(ProductController.class)
@Import({SecurityJavaConfig.class, JwtUtil.class, OwnerCheckAspect.class})
@EnableAspectJAutoProxy

이런식으로 하면 일단 AOP가 실행된다는 것은 확인했습니다.

그런데 테스트에서 이렇게 @EnableAspectJAutoProxy를 사용해도 되는건지, 어떻게 동작하는건지는 저도 아직 파악을 못했어요

@EnableAspectJAutoProxy같은경우는 제가 한번 정리해보겠습니다
뭔가 방법이 있긴있었네요 감사합니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants