웹/Spring (24) 썸네일형 리스트형 스프링 JWT 서비스 구현하기 안녕하세요 놀이방 사장입니다. 이번 포스팅은 JWT서비스를 직접 구현해보겠습니다. JWT를 생성하고 검증하는 서비스를 구현합니다. 의존성과 토큰 제공자를 추가하고 리프레시 토큰 도메인과 토큰 필터를 구현하면 JWT 서비스를 사용할 수 있다. 1. 의존성 추가 build.gradle에 추가하기 implementation 'io.jsonwebtoken:jjwt:0.9.1' // JWT구현 implementation 'javax.xml.bind:jaxb-api:2.3.1' // XML문서와 Java 객체 간 매핑 자동화 runtimeOnly 'com.h2database:h2' compileOnly 'org.projectlombok:lombok' 4개를 추가해줍니다. 2. 토큰 제공자 추가하기 JWT 토큰을 발.. JWT, 토큰 기반 인증이란? 안녕하세요 놀이방 사장입니다. 이번 포스팅에서는 토큰 기반 인증에 대해 알아보겠습니다. 토큰 기반 인증이란? 사용자가 서버에 접근할 떄 사용자가 인증된 사용자인지 확인하는 방법은 다양하다 대표적으로 1. 서버 기반 인증 2. 토큰 기반 인증이 있다. 스프링 시큐리티에서는 기본적으로 세션기반 인증을 제공해줍니다. 그 중 토큰 기반 인증은 토큰을 사용하는 방법입니다. 토큰은 서버에서 클라이언트를 구분하기 위한 유일한 값이다. 서버가 토큰을 생성해서 클라이언트에게 제공하면 클라이언트는 이 토큰을 가지고 있다가 여러 요청을 이 토큰과 함께 신청 => 서버는 토큰만 보고 유효한 사용자인지 확인 토큰을 전달하고 인증하는 과정 1. 로그인 요청 클라이언트 -> 서버 클라이언트가 아이디와 비밀번호를 서버에게 전달하면서.. 스프링부트3 회원가입 로그인, 로그아웃 구현하기 - 로그인, 로그아웃 서비스 메서드 작성하기 안녕하세요 놀이방 사장입니다. 이번 포스팅 회원가입 로그인, 로그아웃 구현 서비스 메서드를 작성해보겠습니다. 1. 저번 포스팅에 이어 엔티티와 리포지터리가 완성되었으니 스프링 시큐리티에서 로그인을 진행할 때 사용자 정보를 가져오는 코드를 작성하겠습니다. service디렉터리에 UserDetailService.java 만들어 작성한다. package me.joyeonggyu.springbootdeveloper.service; import lombok.RequiredArgsConstructor; import me.joyeonggyu.springbootdeveloper.domain.User; import me.joyeonggyu.springbootdeveloper.repository.UserRepository.. 스프링부트3 회원가입 로그인, 로그아웃 구현하기 - 회원 도메인 만들기 안녕하세요 놀이방 사장입니다. 저번 포스팅에서는 스프링 시큐리티에 대해 배웠습니다. 이제부터 스프링 시큐리티를 이용해 인증,인가 기능을 구현해보겠습니다. 전체적인 흐름은 회원정보를 저장할 테이블을 만들고 테이블과 연결할 도메인을 만든 다음 이 테이블과 연결할 회원 엔티티를 만들고 회원 엔티티와 연결되어 데이터를 조회하게 해줄 리포지터리를 만든 후 마지막으로 스프링 시큐리티에서 사용자 정보를 가져오는 서비스를 만든다. 1. 의존성 추가하기 implementation('org.springframework.boot:spring-boot-starter-security'); implementation('org.thymeleaf.extras:thymeleaf-extras-springsecurity6:'); impl.. 스프링부트3 회원가입 로그인, 로그아웃 구현하기 - 사전지식 스프링 시큐리티 안녕하세요 놀이방 사장입니다 이번 포스팅은 스프링부트3 스프링 시큐리티 프레임워크를 알아보겠습니다. 스프링 시큐리티란? 스프링 기반의 애플리케이션 보안(인증, 인가, 권한) 을 담당하는 스프링 하위 프레임워크이다. 먼저 인증과 인가에 개념에 대해 알아보자 1. 인증 사용자의 신원을 입증하는 과정이다. ex) 사용자가 사이트에 로그인 할 때 누구인지 확인하는 과정을 인증이라고 한다. 2. 인가 사이트 특정 부분에 접근할 수 있는 지 권한을 확인하는 작업이다. EX) 관리자는 관리자 페이지를 들어 갈 수 있지만 일반 사용자는 관리자 페이지에 들어갈 수 없다. 이러한 과정을 인가라고 한다. 인증과 인가를 도구없이 구현할려면 굉장히 많은 시간이 걸리나 스프링 시큐리티를 사용하면 쉽게 구현할 수 있다. 스프링 시.. 스프링부트3 블로그 글 삭제 기능 추가하기 안녕하세요 놀이방사장입니다. 이번 포스팅은 글 상세 화면에서[삭제]버튼을 눌러 글을 삭제하는 기능을 만들어보겠습니다. 삭제코드는 자바스크립트로 작성 src/main/resources/static 디렉터리에 js 디렉터리를 만들고 article.js파일을 만든다. const deleteButton = document.getElementById('delete-btn'); if(deleteButton){ deleteButton.addEventListener('click', event => { let id = document.getElementById('article-id').value; fetch(`/api/articles/${id}`,{ method : 'DELETE' }) .then(()=>{ alert(.. 스프링부트3 블로그 글 상세보기 구현하기 안녕하세요 놀이방 사장입니다. 이번 포스팅에서는 블로그화면상의 보러가기 버튼을 누르면 블로그 글이 보이도록 블로그 글 뷰 구현을 할 예정입니다. 엔티티에 생성시간, 수정 시간을 추가하고 컨트롤러 메서드를 만든 다음 HTML뷰를 만들고 확인하는 과정으로 개발합니다. 엔티티에 생성, 수정시간 추가하기 Article파일을 열어 필드 추가 package me.joyeonggyu.springbootdeveloper.domain; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import org.springframework.data.annotation.CreatedDate; .. 스프링부트3 블로그 목록 뷰 구현하기 안녕하세요 놀이방사장입니다. 이번 포스팅에서는 스프링부트3 블로그 목록 뷰를 구현해보겠습니다. 요청을 받아 사용자에게 보여주기 위해서는 뷰 컨트롤러가 필요합니다. 전에 만든 API부분에서 컨트롤러 메서드가 데이터를 직렬화한 JSON문자열을 반환했지만 뷰 컨트롤러는 뷰의 이름을 반환하고 모델 객체 값을 담는다. 반환하는 값이 다를 뿐 전체적인 구조는 같다. 뷰에게 데이터를 전달하기 위한 객체 생성 dto패키에 ArticleListViewResponse.java파일 생성 package me.joyeonggyu.springbootdeveloper.dto; import lombok.Getter; import me.joyeonggyu.springbootdeveloper.domain.Article; @Getter .. 스프링부트3 - 블로그 화면 구성하기 알고 갈 사전지식 - 타임리프 안녕하세요 놀이방 사장입니다. 이번 포스팅은 스프링부트로 화면을 구성하기 전 알고가야할 사전지식 "타임리프"에 대해 알아보겠습니다. 타임리프란? 타임리프는 템플릿 엔진이다. 템플릿엔진은 스프링 서버에서 데이터를 받아 우리가 보는 웹 페이지 즉, HTML 상에 데이터를 넣어 보여주는 도구이다. 템플릿엔진은 HTML과 함께 템플릿엔진 문법을 살짝 섞어 사용해야한다. 간단한 템플릿 문법 h1 태그에는 ${이름}이 text 어트리뷰트로 할당되어 있다. 이것이 템플릿 문법이다. 이렇게 해두면 서버에서 이름, 나이 라는 키로 데이터를 템플릿 엔진에 넘겨주고 템플릿 엔진은 이를 받아 HTML 에 값을 적용 템플릿엔진은 각각 문법이 미묘하게 달라서 템플릿 엔진마다 문법을 새로 배워야 한다. 대부분의 템플릿 엔진으로 J.. 스프링부트3 블로그 만들기 - 블로그 글 수정 API 구현하기 안녕하세요 놀이방 사장입니다. 이번 포스팅은 스프링부트3 블로그 만들기입니다. 이번에는 글 수정 API를 구현해보겠습니다. 먼저 Article파일에 public void update(String title, String content){ this.title = title; this.content = content; } 값을 수정하는 메서드를 작성해준다. 그 후 글 수정 요청을 받을 DTO를 작성해줍니다. UpdateArticleRequest.java package me.joyeonggyu.springbootdeveloper.dto; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @NoArgsC.. 이전 1 2 3 다음