본문 바로가기

전체 글

(67)
CSRF(Cross Site Request Forgery) CSRF 이란 사이트 간 위조 요청을 통한 공격으로 CSRF 공격은 사용자가 의도치 않게 등록, 수정 등 특정 웹 사이트에 위조된 요청을 보내는 것을 의미한다. Spring에서는 CSRF 방어를 위해 Spring Security를 통해 CSRF Token을 발급한다. 게시물을 만들 때 필요한 form 태그이다. Spring Security를 켜지 않았을 때와는 다르게 value 속성에 어떠한 값이 들어있다. 이것은 CSRF Token으로써 해당 토큰의 값이 정확한지 검증하고, 검증되지 않으면 게시물이 생성되지 않도록 Spring Security가 Block해준다. 예시를 보자. https://codepen.io/jae-soon/pen/qBoLXMp qBoLXMp ... codepen.io 해당 사이트를 ..
[Spring]Spring Security 스프링 시큐리티란 스프링 기반의 Application 인증과 권한, 인가 등을 담당하는 스프링의 하위 프레임 워크이다. 인증? : 신원을 확인하는 것 (누구인지? / 로그인 아이디, 비밀번호가 유효한지?) 인가? : 권한이 있는지 확인하는 것(어떤 것을 할 수 있는지? / 너가 뭘 할 수 있어?) 주로 Servlet Filter와 Filter Chain으로 구성된 위임모델을 사용하며, 개발자는 일일이 보안관련 로직을 만들지 않아 편해진다. 특징 보안과 관련된 많은 옵션을 제공받아 편리하게 사용 가능 Filter 기반으로 동작해 MVC와 분리하여 관리 및 동작 가능 어노테이션 사용으로 간단하게 설정 가능 세션 & 쿠키 방식으로 인증 인증 관리자와 접근 결정 관리자를 통해 사용자의 리소스 접근 관리 Filt..
[JAVA]백준 1157 - 단어 공부 백준의 1157번 문제 단어 공부이다. 문제는 문자열이 주어지는데, 가장 많이 사용되는 알파벳이 무엇인지 알아내면 되겠다. 그 중 가장 눈에 띄는 부분은 "단, 대문자와 소문자를 구분하지 않는다."이다. 이를 보고 모든 문자를 대문자나 소문자로 변경하여 푼다면 쉽게 풀리지 않을까? 라는 생각을 했다. 문자의 코드값을 안다면 충분히 쉽게 풀릴 문제이다. 시작해보자. 1. 가장 먼저 알파벳들의 인덱스의 갯수가 추가될 int형 배열 arr을 추가한다. 어차피 가장 많은 값을 출력시키기 때문에 초기화는 0으로 해주었다. 2. 입력받은 모든 문자를 대문자화 시켜주었다. 소문자와 대문자는 구분하지 않고 알파벳의 갯수만 센다 했으니 대소문자는 굳이 필요가 없어 모두 대문자로 진행했다. 충분히 소문자로도 진행 가능하지..
[Spring]기능 - 페이징 기능 페이징은 아주 많은 글이 있을 경우, ?개씩 묶어 출력시켜주는 기능을 얘기한다. 페이징 기능을 구현해보자. 1. 테스트 데이터 생성 많은 데이터가 필요하기에 테스트 데이터를 만들어보자. 이미 Test를 위한 데이터를 만드는 부분이 있으니 이를 이용해보자. @Test void 저장() { int lastId = 300; IntStream.rangeClosed(3, lastId).forEach(id -> { Question q = new Question(); q.setSubject("%d번 질문".formatted(id)); q.setContent("%d번 질문의 내용".formatted(id)); q.setCreateDate(LocalDateTime.now()); questionRepository.save..
[Git]Git Interactive tutorial5 4단계를 어제에 이어 풀어볼 차례이다. 3. 커밋 갖고 놀기2 interactive rebase를 사용하면, 충돌이 일어날 수 있다. 그러니 cherry-pick을 사용해보자 우리의 목표이다. 시작 부분이다. main에서 newImage를 cherry-pick하고, 다시 main에서 newImage와 caption을 cherry-pick하면 되지 않을까 싶다. (1) git checkout main : HEAD를 main으로 checkout (2) git cherry-pick newImage : newImage를 복사하여 c1 아래로 둔다. 하지만, 여기서 main이 c2의 복사본으로 왔지만, c1의 자식으로 c2와 c3의 복사본이 와야하기 때문에 main이 다시 c1으로 이동해야 한다. (3) git ..
[Spring]기능 - 네비게이션 바 네비게이션 바 만들기를 해보자. 네비게이션 바는 그냥 네비게이션 같은 역할을 한다. 이런것도 네비게이션 바 일 것이다.. 바로 만들어보자. 내용은 "Spring 시작하기"를 이어서 진행한다. 1. nav영역 추가 모든 페이지에 공통적으로 추가해야하는 부분이기 때문에 layout.html에 추가한다. bootstrap을 이용해 꾸며준 navbar영역의 코드를 header 영역 대신에 추가한다. SBB 로그인 그러면 이와 같이 네비게이션 바가 생성된다. 하지만, 화면이 줄어들었을 때 햄버거 바가 생성된다. 이를 클릭하면 로그인 및 다른 기능들이 나올 수 있도록 해야하는데 JavaScript를 사용한다. 나는 BootStrap JavaScript를 사용했다. head 부분에 아래 코드를 삽입한다. 그러면 이렇..
[Spring]Spring 시작해보기(14) - 에러메시지 출력 창 중복 제거 각 template에서 오류 메시지를 출력하기 위한 부분의 중복이 있다. 이런 중복을 없애기 위해서는 어떻게 해야할까? “공통 템플릿”을 사용해 에러메시지를 출력하는 부분의 중복을 없애보자. 1. 중복되는 영역 템플릿 생성 form_errors.html 파일을 만들어 중복되는 부분을 템플릿 상속으로 해결할 수 있도록 한다. 여기서 th:fragment=”formErrorsFragment” 라는 속성을 추가했는데, 이는 반복되는 부분을 처리하기 위한 것이다. 2. 공통 템플릿 적용 공통 템플릿을 적용하기 위해 각 form.html을 수정한다. 여기서 replace는 해당 태그를 완전히 대체하는 방법으로 해당 구간을 form_error.html 파일의 fragment 속성이 formErrorsFragment..
[Spring]Spring 시작해보기(13) - 답변 등록 오류 이전 글 처럼 답변 작성에 form이 비어있을 경우, 오류창을 띄우는 방법을 알아보자. 1. AnswerForm class를 만든다. answer의 내용을 적는 form이 비어있는지, 아닌지에 대해서 검증하기 위해 사용하는 AnswerForm 객체를 만든다. @Getter @Setter public class AnswerForm { @NotEmpty(message = "내용은 필수항목입니다.") private String content; } 2. Controller 수정 @PostMapping("/create/{id}") public String createAnswer(Model model, @PathVariable("id") Integer id, @Valid AnswerForm answerForm, B..