-
Notifications
You must be signed in to change notification settings - Fork 74
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
base: tmxhsk99
Are you sure you want to change the base?
7주차 : 보안 #86
Conversation
인증 필터 및 인증 에러 처리를 위한 필터 추가
인증로직을 인터셉터에서 처리하는 부분에서 SpringSecurity으로 변경으로 인한 기존 인터셉터 삭제
기존에 유효한 토큰인경우인데 유효하지 않는 경우의 로직이 존재하여 삭제
There was a problem hiding this 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() |
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
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/{상품아이디} 요청에 대해서만 인증을 요구합니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이건 코드를 그대로 풀어서 쓴 것 같아요. 코드가 변경되면 주석이 바로 영향이 받습니다. 코드를 변경했는데 실수로 주석을 수정하지 않으면 큰 혼돈이 올거예요.
코드의 내용을 그대로 주석에 표현하여 해당 주석 삭제
/** | ||
* 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]+$")); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
주석이 불필요하다기 보다는 여기서 하는 일을 더 설명해주면 좋을 것 같아요.
음... 요청이 상품 생성 요청인지 확인합니다 라고 할 수도 있고
조금 더 자세하게 얘기해서 Javadoc처럼 쓰면
요청이 상품 생성 요청이면 true를, 아니라면 false를 반환합니다.
요렇게 할 수도 있을 것 같아요.
평문의 패스워드를 암호화하도록 기능 추가
해당 given 이 제대로 동작을 안하여 현재 수정 진행중
implementation 'org.springframework.boot:spring-boot-starter-security' | ||
|
||
// Spring AOP | ||
implementation 'org.springframework:spring-aop' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AOP를 사용하셨군요. 팀원들이랑 협업한다고 가정했을 때, 이러한 기술 도입에 대해서 충분한 설명이 있어야 될 것 같아요.
만약에 팀원들에게 이 기술 도입에 대해서 설득하려고 할 때 뭐라고 하는게 좋을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
일단 현재 상황을 도입 할 만한 상황인지 고려합니다
프로젝트 일정 및 현재 팀원들의 기술수준이 해당 기술을 소화할만큼의 역량이 되는지
팀원들이 긍정적으로 받아들일 사람인지도 고려합니다.
만약에 프로젝트 일정이 충분하고 팀원들의 상태도
해당기술을 사용할 역량 혹은 긍정적으로 받아들일 여부가 된다면
이런 권한 체크에 관한 로직같은경우 비즈니스로직에 공통으로 필요하지만
해당 기능자체가 핵심 비즈니스로직은 아니니 비즈니스로직은 비즈니스로직만 볼수 있게
AOP를 써서 분리하자고 이야기합니다.
그리고 동시에 관련 지식 혹은
실제 적용할 AOP 코드 부분을 현재 적용하려면 이렇게 적용할것이다 및 주의점을 문서로 작성하여 배포합니다
그리고 커피도 한잔씩 사줍니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사람과 사람과의 관계가 더 중요하다고 생각하시는군요 ㅎㅎ 저도 동의합니다
안녕하세요 |
음... 일단 몇가지 시도는 해보았는데요. @WebMvcTest(ProductController.class)
@Import({SecurityJavaConfig.class, JwtUtil.class, OwnerCheckAspect.class})
@EnableAspectJAutoProxy 이런식으로 하면 일단 AOP가 실행된다는 것은 확인했습니다. 그런데 테스트에서 이렇게 |
|
안녕하세요!
일단 올리고 시간 날 때 진행하도록 하겠습니다
어제 실제로 뵈서 반가웠습니다!
감사합니다!