#프로젝트 다운로드

 

스프링 숙련주차.zip

 

drive.google.com

#프로젝트 소스

 

GitHub - whitewise95/voyage99: 항해99에서 진행한 과제 및 프로젝트 모음

항해99에서 진행한 과제 및 프로젝트 모음. Contribute to whitewise95/voyage99 development by creating an account on GitHub.

github.com

스프링 입문 프로젝트 "2022.06.30 - [항해99/프로젝트] - [항해99] 3주차 스프링 입문 프로젝트 " 에서 스프링 시큐리티와 JWT를 사용하여 회원관리 및 로그인 유지와 댓글CRUD도 가능하게 develop 하는 프로젝트 입니다. 링크를 타시면 저번 주차에 어떻게 했는지 확인이 가능합니다.

#이번 프로젝트에서 배운점 및 알게된 점

링크를 타고 들어가면 정리해둔 내용을 확인 할 수 있습니다.

  1. 스프링시큐리티 인증과 인가에 대해서도 알게되었다. 기존에 " 스프링 부트와 AWS로 구현하는 웹서비스 따라하기 " 라는 책 따라서 한번 구현 해본적이 있지만 이렇게 깊이 공부까지 못했고 나의 기존 서비스에 적용해보고 난 에러들을 눈으로 볼 수 있었다.
  2. 스프링 시큐리티를 이용한 JWT 를 알게 되었다. 지금까지 JWT는 단독으로 사용하는 줄 알았는데 Filter Chain에 포함시킬 Filter를 만들어 인가와 인증을 적용시킬 수 있다.
  3. 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
복사했습니다!