본 글은 프로젝트를 기록하기 위해 적은 글 입니다.
수정이 될 수 있으며, 정확하지 않을 수 있습니다.
전날 분량이 너무 적어 같이 쓰게 되었습니다.
✅ Day 6
📌 JWT Provider를 이용한 로그인 구현
- 프리 때 구현하였던 JWT Tokenizer 가 아닌 Provider로 구현을 하였다.
- 한 깃헙을 참조하여, Controller 부터 Service까지 직접 만들어서 구현해보았다.
- 이번 메인 프로젝트가 끝나면 해당 정보들을 정리해서 깃헙과 블로그에 올릴 생각이다.
- 프리 때 해당 토큰이 잘 오가지 않았던 적이 있어서 바디로도 헤더로도 둘 다 출력 할 수 있게 우선 설계하였다.
- 참고한 깃헙 주소 : https://github.com/ParkJiwoon/practice-codes/tree/master/spring-security-jwt
🚨 구현 중 발생한 문제
- 권한 인증 문제가 발생하였다.
- SecurityConfig에서 권한에 따라 HttpMethod로 url에 접근 할 수 없게 막을 수 있다.
- 하지만 현재 hasRole(), hasAnyRole(), hasAuthority(), hasAnyAuthority()로 막을 수는 있는데, 인증이 되지 않는다.
- 그래서 로그인과 회원가입을 제외하고 모두 인증된 즉, authenticated()로 해두었다.
- 헤더로 보내면 인증은 되니까..!
- 우선 아래에 있는 클래스를 공부해보아야 할 것 같다. 이것과 관련이 있을 것 같다는 예상이 든다.
/* 원래 하려 했던 것 */
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.headers().frameOptions().sameOrigin()
.and()
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.formLogin().disable()
.httpBasic().disable()
.apply(new JwtSecurityConfig(jwtProvider))
.and()
.authorizeHttpRequests(authorize -> authorize
.antMatchers(HttpMethod.GET, "/members/client/**").hasRole("CLIENT")
.antMatchers(HttpMethod.PATCH, "/members/client/**").hasAnyRole("CLIENT")
.anyRequest().permitAll()
)
.exceptionHandling()
.authenticationEntryPoint(new MemberAuthenticationEntryPoint())
.accessDeniedHandler(new MemberAccessDeniedHandler());
return http.build();
}
/* 현재 구현된 코드 */
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.headers().frameOptions().sameOrigin()
.and()
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.formLogin().disable()
.httpBasic().disable()
.apply(new JwtSecurityConfig(jwtProvider))
.and()
.authorizeHttpRequests(authorize -> authorize
.antMatchers(HttpMethod.POST, "/members/signup").permitAll()
.antMatchers(HttpMethod.POST, "/login").permitAll()
.anyRequest().authenticated()
)
.exceptionHandling()
.authenticationEntryPoint(new MemberAuthenticationEntryPoint())
.accessDeniedHandler(new MemberAccessDeniedHandler());
return http.build();
}
✅ Day 7
📌 OAuth2를 구현하기 위한 공부 및 자료를 통한 코드 작성
- 프리 때 하지 못했던 소셜 로그인을 구현하려고 계획
- 한 블로그의 글을 참조하면서 공부하였다.
- 지금은 보이지 않는 클래스도 있어서 찾아가면서 쭉 보았다.
- 세 번 정도 코드를 읽어본 후 작업을 해보았다.
- 현재 한 30 프로 정도....
- 참고한 자료들은 공부 후 내것으로 만들어 같이 올리려고 한다.
- 또한 소셜로 로그인한다면 판매자와 소비자를 어떻게 저장해야할 지 고민을 해봐야 할 것 같다.
📌 판매자 테이블 변경
- 원래는 판매자에 들어갈 이미지의 테이블을 따로 만들어서 관리하려고 계획
- 이미지를 S3 버킷에 넣고, 경로를 주는 방법으로 구현 예정
- 따라서 한 장의 이미지라면, 따로 테이블을 둬서 관리하기 보다는 그냥 판매자 테이블에 필드로 넣는 게 나을 것 같다고 판단
📌 회원 테이블 변경
- 소셜 로그인을 구현하려고 하다 보니, 해당 소셜의 정보를 저장하여야 하지 않을까 하여 provider 필드 추가
- 해당 파트는 응답 바디를 어떻게 해야할 지는 우선 소셜을 구현해 본 이후 판단해보려 한다.
🔥내일 할 일
- 소셜 로그인 구현
- 소셜 로그인 시, 생산자와 소비자 나누는 방법 생각
- 멘토링
+ 현재 눈의 피로도가 엄청 쌓였다.. 제발 제발 모니터 멀리 두고, 쉴 때는 전자기기 멀리하고...
'Study in Bootcamp > Main Project' 카테고리의 다른 글
[Main Project] Day 9 : 로그인 수정하기 (1) | 2022.11.19 |
---|---|
[Main Project] Day 8 : 소셜 로그인 구현 및 자체 로그인 공통 클래스 정리 (3) | 2022.11.17 |
[Main Project] Day 5 + 주말 : 회원 관련 CRUD 구현, Rest Docs 시도... (0) | 2022.11.14 |
[Main Project] Day 4 : API 명세서 작성 ,ERD 수정 최종(?), Entity 작업 (0) | 2022.11.11 |
[Main Project] Day 3 : ERD 수정 및 멘토링 (0) | 2022.11.11 |
댓글