#프로젝트 다운로드
#프로젝트 소스
스프링 입문 프로젝트 "2022.06.30 - [항해99/프로젝트] - [항해99] 3주차 스프링 입문 프로젝트 " 에서 스프링 시큐리티와 JWT를 사용하여 회원관리 및 로그인 유지와 댓글CRUD도 가능하게 develop 하는 프로젝트 입니다. 링크를 타시면 저번 주차에 어떻게 했는지 확인이 가능합니다.
#이번 프로젝트에서 배운점 및 알게된 점
링크를 타고 들어가면 정리해둔 내용을 확인 할 수 있습니다.
- 스프링시큐리티와 인증과 인가에 대해서도 알게되었다. 기존에 " 스프링 부트와 AWS로 구현하는 웹서비스 따라하기 " 라는 책 따라서 한번 구현 해본적이 있지만 이렇게 깊이 공부까지 못했고 나의 기존 서비스에 적용해보고 난 에러들을 눈으로 볼 수 있었다.
- 스프링 시큐리티를 이용한 JWT 를 알게 되었다. 지금까지 JWT는 단독으로 사용하는 줄 알았는데 Filter Chain에 포함시킬 Filter를 만들어 인가와 인증을 적용시킬 수 있다.
- Ajax에 헤더에 데이터를 태워 통신하는 법을 알게되었다. 토큰을 헤더 담아 서버에서 받는데 Ajax 기본적이 통신만 해보았지 헤더를 설정할 수 있다는걸 알게되었다.
#보안할 점 및 문제해결한 부분
RestFul하게 API설계
RestFul하게 API설계하고 싶어서 느리더라도 천천히 프로그래밍을 했다. 하지만 다 끝나고 생각해보니 계층구도로 URI를 잘못 설계한 느낌이다. 보안을 하고싶다.
현재 기술매니저님께 "데이터를 쓰지 않았도 아래 보안할 부분처럼 글 ID를 보내야하나요?" 라고 질문을 남겼는데 답변을 기다리고있다.
현재 uri 구성
/comment/{댓글ID}
보안하고싶은 부분
/comment/{글ID}/{댓글ID}
dependensy 버전 문제?!
기존에 JWT 라이브러리를 'com.auth0:java-jwt:3.13.0' 를 써서 JWT를 구현했는데 우분투환경에 배포하면 아래와 같이 에러가 났다.
나와 같은 문제를 겪는 사람은 아직 나의 서치능력으론 못찾았지만 group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1' 라이브러리로
변경하여 JWT부분을 다시 구현하였다.
Caused by: java.lang.ClassNotFoundException: com.auth0.jwt.interfaces.JWTVerifier
# 추가된 API명세
회원관리 API
📍기능methodurlrequestresponse
회원가입 | POST | /user/signup | 타입1 | 타입3 |
로그인 | POST | /user | 타입2 | 타입3 |
⭐️ 타입1
{
"usernaem" : " ",
"password" : " ",
"passwordCheck" : " ",
"email" : " "
}
⭐️ 타입2
{
"usernaem" : " ",
"password" : " "
}
⭐️ 타입3
{
"id" :
"content" : ""
"password" : ""
"imgUrl" : ""
"writer" : ""
"createDate" : ""
"ModifiedDate" : ""
}
댓글CURD API
📍기능methodurlrequestresponse
댓글 조회 | GET | /comment/{blogId} | 타입5 | |
댓글 쓰기 | POST | /comment/{blogId} | 타입4 | 타입6 |
댓글 삭제 | DELETE | /comment/{commentId} | 타입4 | 타입6 |
댓글 수정 | PUT | /comment/{commentId} | 타입4 | 타입6 |
⭐️ 타입4
Header = Authorization : "토큰"
{
"comment" : "sadasd222"
}
⭐️ 타입5
{
"createDate": "2022.06.03 11:22:43",
"modifiedDate": "2022.06.03 11:22:43",
"id": 4,
"comment": "214512412",
"blogId": 1,
"userId": "admin"
}
⭐️ 타입6
{
"statusCode": 200 또는 500,
"message": "메세지"
}
#스프링 시큐리티를 사용해 회원관리하는 방법을 순서도로
회원가입 순서도
📍
로그인 순서도
📍
토큰으로 로그인유지 순서도
📍
#추가된 UI
로그인화면
📍
로그아웃 버튼
📍
댓글 모달 열기 가능
📍
댓글CURD
📍
#시큐리티 와 JWT 로직을 위한 생성된 구조
프로젝트\SRC\MAIN\JAVA\COM\SPARTA_SPRING\SPARTA_SPRING3\SECURITY
│ FilterSkipMatcher.java
│ FormLoginSuccessHandler.java
│ UserDetailsImpl.java
│ UserDetailsServiceImpl.java
│ WebSecurityConfig.java
│
├─filter
│ FormLoginFilter.java
│ JwtAuthFilter.java
│
├─jwt
│ HeaderTokenExtractor.java
│ JwtDecoder.java
│ JwtPreProcessingToken.java
│ JwtTokenUtils.java
│
└─provider
FormLoginAuthProvider.java
JWTAuthProvider.java
'항해99' 카테고리의 다른 글
[항해99] 6주차 자바 및 리액트 미니 프로젝트 (0) | 2022.06.30 |
---|---|
[항해99] 5주차 스프링 심화 프로젝트 (0) | 2022.06.30 |
[항해99] 3주차 스프링 입문 프로젝트 (0) | 2022.06.30 |
[항해99] 2주차 객체지향프로그래밍 (0) | 2022.06.30 |
[항해99] 1주차 파이썬 미니 웹개발 프로젝트 (0) | 2022.06.30 |