{"id":33019,"date":"2024-11-01T09:13:09","date_gmt":"2024-11-01T09:13:09","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33019"},"modified":"2024-11-01T11:29:19","modified_gmt":"2024-11-01T11:29:19","slug":"spring-boot-backend-development-course-implementing-login-and-logout-with-oauth2-adding-logic-for-editing-deleting-posts-and-verifying-authors","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33019\/","title":{"rendered":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors"},"content":{"rendered":"<p><body><\/p>\n<h2>Table of Contents<\/h2>\n<ol>\n<li><a href=\"#introduction\">Introduction<\/a><\/li>\n<li><a href=\"#spring-boot-introduction\">Introduction to Spring Boot<\/a><\/li>\n<li><a href=\"#oauth2-overview\">Overview of OAuth2<\/a><\/li>\n<li><a href=\"#implementing-login-logout\">Implementing Login\/Logout<\/a><\/li>\n<li><a href=\"#implementing-post-edit-delete\">Implementing Post Edit and Delete Features<\/a><\/li>\n<li><a href=\"#adding-author-confirmation-logic\">Adding Author Confirmation Logic<\/a><\/li>\n<li><a href=\"#conclusion\">Conclusion<\/a><\/li>\n<\/ol>\n<h2 id=\"introduction\">Introduction<\/h2>\n<p>Today, we will learn how to develop a backend application using Spring Boot. This tutorial will cover how to implement login and logout using OAuth2, as well as how to add functionality for editing and deleting posts and author confirmation logic. Through this process, you will learn to utilize various features of Spring Boot.<\/p>\n<h2 id=\"spring-boot-introduction\">Introduction to Spring Boot<\/h2>\n<p>Spring Boot is a framework that supports easy application development based on the Spring Framework. It helps you build applications quickly without complex configurations and supports various embedded servers (e.g., Tomcat, Jetty, etc.). The main benefits of Spring Boot are:<\/p>\n<ul>\n<li>Quick Start: Initial setup is simple, reducing development time.<\/li>\n<li>Auto Configuration: Automatically sets up necessary libraries and dependencies.<\/li>\n<li>Embedded Server: You can easily run applications locally without separate server configuration.<\/li>\n<li>Strong Community: There is a vibrant user base and ample resources available for learning and problem-solving.<\/li>\n<\/ul>\n<h2 id=\"oauth2-overview\">Overview of OAuth2<\/h2>\n<p>OAuth2 is an authentication protocol that allows client applications to obtain permission to access user resources. Through OAuth2, users can securely manage access permissions for applications. OAuth2 supports several authentication methods (e.g., Authorization Code, Implicit, Resource Owner Password Credentials, etc.) and is widely used in web and mobile applications.<\/p>\n<p>In this tutorial, we will implement user authentication using OAuth2 and add features for creating, editing, and deleting posts with this authentication information. We will primarily use the Authorization Code Grant method.<\/p>\n<h2 id=\"implementing-login-logout\">Implementing Login\/Logout<\/h2>\n<p>We will explore how to implement OAuth2-based login\/logout functionality in a Spring Boot application. In this process, we will use Spring Security to handle authentication and authorization. Let&#8217;s proceed to the next steps.<\/p>\n<h3>1. Add Dependencies<\/h3>\n<p>First, we need to add the necessary dependencies to the Maven pom.xml file. Please add the following dependencies:<\/p>\n<pre><code>\n      &lt;dependency&gt;\n          &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n          &lt;artifactId&gt;spring-boot-starter-security&lt;\/artifactId&gt;\n      &lt;\/dependency&gt;\n      &lt;dependency&gt;\n          &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n          &lt;artifactId&gt;spring-boot-starter-oauth2-client&lt;\/artifactId&gt;\n      &lt;\/dependency&gt;\n      &lt;dependency&gt;\n          &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n          &lt;artifactId&gt;spring-boot-starter-web&lt;\/artifactId&gt;\n      &lt;\/dependency&gt;\n    <\/code><\/pre>\n<h3>2. Configure application.yml<\/h3>\n<p>Now we need to configure the OAuth2 client information. Set the following in the src\/main\/resources\/application.yml file:<\/p>\n<pre><code>\n    spring:\n      security:\n        oauth2:\n          client:\n            registration:\n              google:\n                client-id: YOUR_CLIENT_ID\n                client-secret: YOUR_CLIENT_SECRET\n                scope: profile, email\n                redirect-uri: \"{baseUrl}\/login\/oauth2\/code\/{registrationId}\"\n                authorization-grant-type: authorization_code\n            provider:\n              google:\n                authorization-uri: https:\/\/accounts.google.com\/o\/oauth2\/auth\n                token-uri: https:\/\/oauth2.googleapis.com\/token\n                user-info-uri: https:\/\/www.googleapis.com\/userinfo\/v2\/me\n    <\/code><\/pre>\n<h3>3. Create SecurityConfig Class<\/h3>\n<p>Create a SecurityConfig class for secure application configuration. This class will handle the security settings of Spring Security.<\/p>\n<pre><code>\n    import org.springframework.context.annotation.Bean;\n    import org.springframework.context.annotation.Configuration;\n    import org.springframework.security.config.annotation.web.builders.HttpSecurity;\n    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;\n    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;\n\n    @Configuration\n    @EnableWebSecurity\n    public class SecurityConfig extends WebSecurityConfigurerAdapter {\n\n        @Override\n        protected void configure(HttpSecurity http) throws Exception {\n            http\n                .authorizeRequests()\n                    .antMatchers(\"\/\", \"\/login\", \"\/error\/**\").permitAll()\n                    .anyRequest().authenticated()\n                    .and()\n                .oauth2Login()\n                    .defaultSuccessUrl(\"\/home\", true)\n                    .failureUrl(\"\/login?error\");\n        }\n    }\n    <\/code><\/pre>\n<h3>4. Implement Login and Logout Controller<\/h3>\n<p>Create a HomeController class that will be called when users attempt to log in, handling the flow after login.<\/p>\n<pre><code>\n    import org.springframework.stereotype.Controller;\n    import org.springframework.web.bind.annotation.GetMapping;\n\n    @Controller\n    public class HomeController {\n\n        @GetMapping(\"\/\")\n        public String index() {\n            return \"index\"; \/\/ Return to index.html page\n        }\n\n        @GetMapping(\"\/home\")\n        public String home() {\n            return \"home\"; \/\/ Return to home.html page\n        }\n    }\n    <\/code><\/pre>\n<p>At this point, basic login and logout functionality has been implemented. Users can now log in using their Google accounts.<\/p>\n<h2 id=\"implementing-post-edit-delete\">Implementing Post Edit and Delete Features<\/h2>\n<p>Now that we have implemented basic login\/logout functionality, we will add the ability to create, edit, and delete posts.<\/p>\n<h3>1. Create Entity and Repository for Posts<\/h3>\n<p>First, we need to create a Post entity and a JPA repository for it.<\/p>\n<pre><code>\n    import javax.persistence.*;\n    import java.time.LocalDateTime;\n\n    @Entity\n    public class Post {\n        @Id\n        @GeneratedValue(strategy = GenerationType.IDENTITY)\n        private Long id;\n        \n        private String title;\n        private String content;\n\n        @ManyToOne\n        @JoinColumn(name=\"user_id\")\n        private User user; \/\/ Author information\n\n        private LocalDateTime createdAt;\n        private LocalDateTime updatedAt;\n\n        \/\/ getters and setters\n    }\n    <\/code><\/pre>\n<pre><code>\n    import org.springframework.data.jpa.repository.JpaRepository;\n\n    public interface PostRepository extends JpaRepository<Post, Long> {\n    }\n    <\/code><\/pre>\n<h3>2. Implement Post Creation and Editing Functionality<\/h3>\n<p>Create a controller to handle post creation and editing functionality.<\/p>\n<pre><code>\n    import org.springframework.security.core.annotation.AuthenticationPrincipal;\n    import org.springframework.stereotype.Controller;\n    import org.springframework.ui.Model;\n    import org.springframework.web.bind.annotation.*;\n\n    @Controller\n    @RequestMapping(\"\/posts\")\n    public class PostController {\n\n        private final PostRepository postRepository;\n\n        public PostController(PostRepository postRepository) {\n            this.postRepository = postRepository;\n        }\n\n        @GetMapping(\"\/new\")\n        public String newPost(Model model) {\n            model.addAttribute(\"post\", new Post());\n            return \"newpost\"; \/\/ Post creation page\n        }\n\n        @PostMapping\n        public String createPost(@ModelAttribute Post post, @AuthenticationPrincipal User user) {\n            post.setUser(user); \/\/ Set the currently logged-in user\n            post.setCreatedAt(LocalDateTime.now());\n            postRepository.save(post);\n            return \"redirect:\/posts\";\n        }\n\n        @GetMapping(\"\/{id}\/edit\")\n        public String editPost(@PathVariable Long id, Model model) {\n            Post post = postRepository.findById(id).orElseThrow();\n            model.addAttribute(\"post\", post);\n            return \"editpost\"; \/\/ Post editing page\n        }\n\n        @PostMapping(\"\/{id}\")\n        public String updatePost(@PathVariable Long id, @ModelAttribute Post post) {\n            post.setId(id);\n            post.setUpdatedAt(LocalDateTime.now());\n            postRepository.save(post);\n            return \"redirect:\/posts\";\n        }\n    }\n    <\/code><\/pre>\n<h3>3. Implement Post Deletion Functionality<\/h3>\n<p>Add a method for deleting posts to the PostController.<\/p>\n<pre><code>\n    @DeleteMapping(\"\/{id}\")\n    public String deletePost(@PathVariable Long id) {\n        postRepository.deleteById(id);\n        return \"redirect:\/posts\";\n    }\n    <\/code><\/pre>\n<h2 id=\"adding-author-confirmation-logic\">Adding Author Confirmation Logic<\/h2>\n<p>Finally, we add author confirmation logic to ensure that users can only edit or delete their own posts. To do this, we will add logic that compares the logged-in user&#8217;s information with the author of the post.<\/p>\n<pre><code>\n    @PostMapping(\"\/{id}\/edit\")\n    public String editPost(@PathVariable Long id, @AuthenticationPrincipal User user) {\n        Post post = postRepository.findById(id).orElseThrow();\n        if (!post.getUser().equals(user)) {\n            throw new AccessDeniedException(\"You cannot edit this post.\"); \/\/ Access denied exception\n        }\n        return \"editpost\"; \/\/ Move to edit page\n    }\n\n    @DeleteMapping(\"\/{id}\")\n    public String deletePost(@PathVariable Long id, @AuthenticationPrincipal User user) {\n        Post post = postRepository.findById(id).orElseThrow();\n        if (!post.getUser().equals(user)) {\n            throw new AccessDeniedException(\"You cannot delete this post.\"); \/\/ Access denied exception\n        }\n        postRepository.deleteById(id);\n        return \"redirect:\/posts\";\n    }\n    <\/code><\/pre>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p>In this tutorial, we learned how to implement OAuth2-based login and logout functionality using Spring Boot, and how to add features for creating, editing, and deleting posts. Additionally, we established safeguards to ensure that users can only edit or delete their own posts through author confirmation logic. Through this process, we became acquainted with the basic usage of Spring Boot and OAuth2, gaining foundational knowledge necessary for actual application development.<\/p>\n<p>We hope to continue learning about various features using Spring Boot and improve our skills further. Wishing you the best of luck on your development journey!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Table of Contents Introduction Introduction to Spring Boot Overview of OAuth2 Implementing Login\/Logout Implementing Post Edit and Delete Features Adding Author Confirmation Logic Conclusion Introduction Today, we will learn how to develop a backend application using Spring Boot. This tutorial will cover how to implement login and logout using OAuth2, as well as how to &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33019\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[131],"tags":[],"class_list":["post-33019","post","type-post","status-publish","format-standard","hentry","category-spring-boot-backend-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/33019\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Table of Contents Introduction Introduction to Spring Boot Overview of OAuth2 Implementing Login\/Logout Implementing Post Edit and Delete Features Adding Author Confirmation Logic Conclusion Introduction Today, we will learn how to develop a backend application using Spring Boot. This tutorial will cover how to implement login and logout using OAuth2, as well as how to &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33019\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:13:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:29:19+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/33019\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33019\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors\",\"datePublished\":\"2024-11-01T09:13:09+00:00\",\"dateModified\":\"2024-11-01T11:29:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33019\/\"},\"wordCount\":639,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33019\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33019\/\",\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:13:09+00:00\",\"dateModified\":\"2024-11-01T11:29:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33019\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33019\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33019\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/33019\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Table of Contents Introduction Introduction to Spring Boot Overview of OAuth2 Implementing Login\/Logout Implementing Post Edit and Delete Features Adding Author Confirmation Logic Conclusion Introduction Today, we will learn how to develop a backend application using Spring Boot. This tutorial will cover how to implement login and logout using OAuth2, as well as how to &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors\"","og_url":"https:\/\/atmokpo.com\/w\/33019\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:13:09+00:00","article_modified_time":"2024-11-01T11:29:19+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"6\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/33019\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33019\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors","datePublished":"2024-11-01T09:13:09+00:00","dateModified":"2024-11-01T11:29:19+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33019\/"},"wordCount":639,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33019\/","url":"https:\/\/atmokpo.com\/w\/33019\/","name":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:13:09+00:00","dateModified":"2024-11-01T11:29:19+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33019\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33019\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33019\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Logic for Editing, Deleting Posts, and Verifying Authors"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33019","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=33019"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33019\/revisions"}],"predecessor-version":[{"id":33020,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33019\/revisions\/33020"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33019"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33019"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33019"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}