Web 12

[Swagger] pageable 숨기기

pageable을 @PageableDefault를 이용해 기본값을 넣어주기 때문에 FE에서 받을 필요가 없다. API 명세에 required로 나오다니...😮 @PageableDefault @Parameter(hidden = true) final Pageable pageable 이렇게 @Parameter(hidden = true)로 해주면 pageable이 숨겨진다. 원하는대로 pageable을 숨겼다. v1.3.3.부터 pageable을 required하게 하는 부분을 제거했다던데 @PageableDefault 때문에 required로 표시되는걸까,,🤔🤔🤔 참고 👇 https://github.com/springdoc/springdoc-openapi/issues/561 Pageable required ·..

Web 2023.06.29

JWT 인증

JWT를 사용한 인증 구현 Access Token 보호된 자원(resource server)에 접근하기 위해 사용 Refresh Token 유효하지 않거나 만료된 Access Token을 재발급 받기위해 사용한다. 인증 서버에서만 사용되고 절대 resource server에 보내지는 일은 없다. (A) 클라이언트가 access token을 요청 (B) authorization server는 클라이언트를 인증하고 인증 권한이 유효하면 access token, refresh token을 발급해준다. (C) 클라이언트는 resource erver에 access token과 함께 요청을 보낸다. (D) resource server는 access token을 검증하고, 유효하면 요청을 실행 (E) access t..

Web 2023.03.09

Preflight request

Preflight는 HTTP 요청의 종류다. 요청된 기능이 안전하고 이용가능한지 확인하기 위해 실제 요청을 보내기 전에 전송 서버의 CORS (Cross-Origin Resource Sharing) 정책을 확인하기 위해 사용된다. preflight request는 실제 요청(예를 들어, GET 또는 POST 요청처럼)으로 전송하는 것이 안전한지 결정하기 위해 브라우저에서 서버로 전송되는 HTTP OPTIONS 요청이다. 서버는 허용 가능한 메소드, 헤더, 원본 정보를 응답으로 보낸다. preflight request의 목적은 서버의 리소스에 인증되지 않은 접근을 막는다. 또한, 어떠한 민감한 정보가 보호될지 보장하고, 비정상적인 행위자에게 노출되지 않도록 한다. Preflight request를 언제 사..

Web 2023.02.05

Swagger

내가 사용한 Spring Boot 버전은 2.6.14 Swagger를 적용 후 /swagger-ui로 접속 나는 포트번호를 8011로 설정했었다. 🐸 Swagger 사용하기 1. build.gradle에 추가 implementation 'io.springfox:springfox-swagger-ui:3.0.0' implementation 'io.springfox:springfox-swagger2:3.0.0' implementation 'io.springfox:springfox-boot-starter:3.0.0' 2. Swagger 사용을 위해 configuration 작성 @Configuration @EnableSwagger2 public class SpringFoxConfig { private stati..

Web 2023.01.14

nGrinder 설치

내가 사용한 운영체제 : Windows11 ✔️ Prerequisite Oracle JDK 1.6~ or OpenJDK 1.7~ PATH environment 변수를 체크한다. 방화벽에서 차단된 포트는 연다. https://github.com/naver/ngrinder/wiki/Installation-Guide 에서 참고하기 https://github.com/naver/ngrinder/releases 다운로드한다. nGrinder controller 실행 http://localhost:8080으로 접속 후 로그인한다. id와 비밀번호는 admin이다. 여기에서 Agent와 Monitor를 다운로드한다. ngrinder-agent 압축 해제 ngrinder-monitor 압축 해제 ngrinder-agen..

Web 2023.01.03

JWT

JWT Json Web Token Header, payload, signature로 이루어짐 Header은 어떤 방식, 알고리즘을 사용해서 토큰화했는지 명시 Payload는 사용자가 담고자 하는 정보를 담는 곳 Signature는 토큰의 유효성 여부에 대한 정보를 담는 곳 피싱하는 사이트나 앱들은 Token 탈취보다는 개인 정보를 탈취해서 password를 가져가려는 것이 목표 중요한 비즈니스 로직에 2FA, OTP 같은 것을 추가로 걸어서 최대한 방어하려고 한다. 결제나 암호/개인저보와 관련된 부분에 접근할 때에는 패스워드를 다시 입력하거나(토큰 재발행), 전화 OTP 인증, Authenticator 등을 이용 Token 충분히 정보를 옮기는 데이터 조각 사용자의 신원 또는 행위를 수행하기 위한 인가를..

Web 2022.12.09

CORS

SOP Same Origin Policy 다른 출처의 리소스를 사용하는 것에 제한을 두는 보안 방식 Protocol, Host, Port가 같으면 같은 출처다. ex) http://localhost:80과 http://localhost는 같다. CORS Cross-Origin Resource Sharing 추가 HTTP header를 사용해 한 출처에서 실행 중인 web applicaion이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여 pre-flight 요청은 쿠키(JSESSIONID)가 포함되지 않으므로 CORS는 Spring Security 전에 실행되어야 한다. 요청에 쿠키가 포함되지 않고 Spring Security가 먼저라면 사용자가 인증되지 않았다고 판단하고 거절한다. CORS가 ..

Web 2022.10.07

CSRF

An expected CSRF token cannot be found 웹 어플리케이션이 요청을 보낼 때 필요한 CSRF 토큰이 요청에서 빠졌을 때 나타나는 에러 메시지다. CSRF는 웹사이트에서 인증되지 않은 행위를 취하는 비정상적인 행위를 가능하게 하는 보안 취약점이다. 이 취약점을 막기 위해 웹사이트는 요청에 포함된 unique한 토큰을 필요로 한다. 토큰이 빠지거나 매치되지 않는다면 요청은 거절된다. 기본적인 인증을 사용하는 어플리케이션은 CSRF 공격에 취약하다. Spring Security 4.0부터 CSRF 보호는 XML configuration에서 기본적으로 활성화 되어있다. Spring은 CSRF 공격을 막기위해 Synchronizer Token Pattern, 세션 쿠키에 SameSite..

Web 2022.09.15

[Error] Request method 'DELETE' not supported

댓글 삭제하기를 구현하면서 문제가 발생했다. WARN 6520 --- [nio-8080-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'DELETE' not supported] 댓글 삭제는 잘 된다. 하지만, 댓글 삭제 후 해당 게시글을 redirect하는데 405 에러가 뜬다. redirct할 때 DELETE 메소드로 요청을 보내는게 문제 ㅠ /post/detail/21은 댓글이 달린 해당 게시글이다. PUT, GET 메소드만 허용한다고 한다. ✨ 해결 // 삭제 @PostMapping("/delete..

Web 2022.06.04

get과 post 차이

get post 클라이언트에서 서버로 정보를 요청하기 위해 사용 또한, 값이나 내용, 상태 등을 바꾸지 않는 경우에 사용 캐시가 된다. 브라우저에 기록된다. 리소스를 생성/업데이트하기 위해 서버에 데이터 전송 서버상의 데이터 값이나 상태를 바꾸기 위해 사용 캐시가 안된다. 브라우저에 기록되지 않는다. 👇 참고 https://stackoverflow.com/questions/59712007/can-someone-please-clear-the-difference-between-getmapping-and-postmapping-in Can someone please clear the difference between @GetMapping and @PostMapping in spring also can we us..

Web 2022.02.18