{"id":33183,"date":"2024-11-01T09:14:22","date_gmt":"2024-11-01T09:14:22","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33183"},"modified":"2024-11-01T11:28:35","modified_gmt":"2024-11-01T11:28:35","slug":"spring-boot-backend-development-course-implementing-login-and-logout-with-spring-security-implementing-sign-up-implementing-logout","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33183\/","title":{"rendered":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Implementing Sign Up, Implementing Logout"},"content":{"rendered":"<p><body><\/p>\n<h2>Implementing Login\/Logout and Sign Up with Spring Security<\/h2>\n<p>Hello! In this tutorial, we will explore backend development using <strong>Spring Boot<\/strong>. The main goal of this tutorial is to implement login\/logout and sign-up functionalities using <strong>Spring Security<\/strong>. The entire process will proceed through the following steps.<\/p>\n<ul>\n<li>Setting up a Spring Boot project<\/li>\n<li>Configuring Spring Security<\/li>\n<li>Implementing sign-up functionality<\/li>\n<li>Implementing login and logout functionality<\/li>\n<\/ul>\n<h2>1. Setting up a Spring Boot project<\/h2>\n<p>First, let&#8217;s set up a Spring Boot project. You can create a project using [Spring Initializr](https:\/\/start.spring.io\/). Please select the following settings.<\/p>\n<h3>Project Settings<\/h3>\n<ul>\n<li>Project: <strong>Maven Project<\/strong><\/li>\n<li>Language: <strong>Java<\/strong><\/li>\n<li>Spring Boot: <strong>2.5.x<\/strong> (Select the latest stable version)<\/li>\n<li>Dependencies:\n<ul>\n<li>Spring Web<\/li>\n<li>Spring Security<\/li>\n<li>Spring Data JPA<\/li>\n<li>H2 Database (an in-memory database for development and testing purposes)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Once the settings are complete, you can download the ZIP file by clicking the <strong>GENERATE<\/strong> button. After downloading, extract the contents and open the project in your preferred IDE.<\/p>\n<h2>2. Configuring Spring Security<\/h2>\n<p>To configure Spring Security, create a class called <code>SecurityConfig.java<\/code>. This class will define the necessary configurations for user authentication and authorization.<\/p>\n<pre><code>package com.example.demo.config;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;\nimport org.springframework.security.config.annotation.web.builders.HttpSecurity;\nimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;\nimport org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;\nimport org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;\nimport org.springframework.security.crypto.password.PasswordEncoder;\n\n@Configuration\n@EnableWebSecurity\npublic class SecurityConfig extends WebSecurityConfigurerAdapter {\n\n    @Override\n    protected void configure(AuthenticationManagerBuilder auth) throws Exception {\n        auth.inMemoryAuthentication()\n            .withUser(\"user\")\n            .password(passwordEncoder().encode(\"password\"))\n            .roles(\"USER\");\n    }\n\n    @Override\n    protected void configure(HttpSecurity http) throws Exception {\n        http.csrf().disable()\n            .authorizeRequests()\n            .antMatchers(\"\/register\").permitAll()\n            .anyRequest().authenticated()\n            .and()\n            .formLogin()\n            .loginPage(\"\/login\")\n            .permitAll()\n            .and()\n            .logout()\n            .permitAll();\n    }\n\n    @Bean\n    public PasswordEncoder passwordEncoder() {\n        return new BCryptPasswordEncoder();\n    }\n}\n<\/code><\/pre>\n<p>The code above shows how to configure user authentication and authorization, including an in-memory user store. It uses <strong>BCryptPasswordEncoder<\/strong> to encrypt passwords.<\/p>\n<h2>3. Implementing sign-up functionality<\/h2>\n<p>To implement sign-up functionality, we will create a <code>User<\/code> entity to store user information and a <code>UserRepository<\/code> interface to handle user data storage.<\/p>\n<pre><code>package com.example.demo.model;\n\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.persistence.GenerationType;\nimport javax.persistence.Id;\n\n@Entity\npublic class User {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n    private String username;\n    private String password;\n\n    \/\/ getters and setters\n}\n<\/code><\/pre>\n<pre><code>package com.example.demo.repository;\n\nimport com.example.demo.model.User;\nimport org.springframework.data.jpa.repository.JpaRepository;\n\npublic interface UserRepository extends JpaRepository<User, Long> {\n    User findByUsername(String username);\n}\n<\/code><\/pre>\n<p>Next, we will create a service and a controller to handle the sign-up process.<\/p>\n<pre><code>package com.example.demo.service;\n\nimport com.example.demo.model.User;\nimport com.example.demo.repository.UserRepository;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.security.crypto.password.PasswordEncoder;\nimport org.springframework.stereotype.Service;\n\n@Service\npublic class UserService {\n\n    @Autowired\n    private UserRepository userRepository;\n\n    @Autowired\n    private PasswordEncoder passwordEncoder;\n\n    public void register(User user) {\n        user.setPassword(passwordEncoder.encode(user.getPassword()));\n        userRepository.save(user);\n    }\n}\n<\/code><\/pre>\n<pre><code>package com.example.demo.controller;\n\nimport com.example.demo.model.User;\nimport com.example.demo.service.UserService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PostMapping;\n\n@Controller\npublic class AuthController {\n\n    @Autowired\n    private UserService userService;\n\n    @GetMapping(\"\/register\")\n    public String showRegistrationForm(Model model) {\n        model.addAttribute(\"user\", new User());\n        return \"register\";\n    }\n\n    @PostMapping(\"\/register\")\n    public String registerUser(User user) {\n        userService.register(user);\n        return \"redirect:\/login\";\n    }\n}\n<\/code><\/pre>\n<p>Now let&#8217;s create the HTML form for the sign-up.<\/p>\n<pre><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;title&gt;Sign Up&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;Sign Up&lt;\/h1&gt;\n    &lt;form action=\"\/register\" method=\"post\"&gt;\n        &lt;label for=\"username\"&gt;Username&lt;\/label&gt;\n        &lt;input type=\"text\" id=\"username\" name=\"username\" required&gt;&lt;br&gt;\n\n        &lt;label for=\"password\"&gt;Password&lt;\/label&gt;\n        &lt;input type=\"password\" id=\"password\" name=\"password\" required&gt;&lt;br&gt;\n\n        &lt;input type=\"submit\" value=\"Register\"&gt;\n    &lt;\/form&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n<h2>4. Implementing login and logout functionality<\/h2>\n<p>Now, let&#8217;s implement the login page and the logout functionality. We will create another HTML for the login page.<\/p>\n<pre><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;title&gt;Login&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;Login&lt;\/h1&gt;\n    &lt;form action=\"\/login\" method=\"post\"&gt;\n        &lt;label for=\"username\"&gt;Username&lt;\/label&gt;\n        &lt;input type=\"text\" id=\"username\" name=\"username\" required&gt;&lt;br&gt;\n\n        &lt;label for=\"password\"&gt;Password&lt;\/label&gt;\n        &lt;input type=\"password\" id=\"password\" name=\"password\" required&gt;&lt;br&gt;\n\n        &lt;input type=\"submit\" value=\"Login\"&gt;\n    &lt;\/form&gt;\n    &lt;a href=\"\/register\"&gt;Sign Up&lt;\/a&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n<p>The logout functionality is provided by Spring Security by default, so no additional implementation is necessary. When the logout endpoint is called, the session is terminated and the user is redirected to the login page.<\/p>\n<h2>5. Conclusion<\/h2>\n<p>In this tutorial, we laid the foundation for backend development using Spring Boot, learning how to implement login, logout, and sign-up functionalities utilizing Spring Security. This process will help you understand how to handle and manage user authentication in web applications. I hope you have established a base to advance to more sophisticated features. In the next tutorial, we will explore REST APIs and JWT authentication.<\/p>\n<p>Thank you!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Implementing Login\/Logout and Sign Up with Spring Security Hello! In this tutorial, we will explore backend development using Spring Boot. The main goal of this tutorial is to implement login\/logout and sign-up functionalities using Spring Security. The entire process will proceed through the following steps. Setting up a Spring Boot project Configuring Spring Security Implementing &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33183\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Implementing Sign Up, Implementing Logout&#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-33183","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 Spring Security, Implementing Sign Up, Implementing Logout - \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\/33183\/\" \/>\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 Spring Security, Implementing Sign Up, Implementing Logout - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Implementing Login\/Logout and Sign Up with Spring Security Hello! In this tutorial, we will explore backend development using Spring Boot. The main goal of this tutorial is to implement login\/logout and sign-up functionalities using Spring Security. The entire process will proceed through the following steps. Setting up a Spring Boot project Configuring Spring Security Implementing &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Implementing Sign Up, Implementing Logout&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33183\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:14:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:28:35+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=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/33183\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33183\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Implementing Sign Up, Implementing Logout\",\"datePublished\":\"2024-11-01T09:14:22+00:00\",\"dateModified\":\"2024-11-01T11:28:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33183\/\"},\"wordCount\":397,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33183\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33183\/\",\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Implementing Sign Up, Implementing Logout - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:14:22+00:00\",\"dateModified\":\"2024-11-01T11:28:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33183\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33183\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33183\/#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 Spring Security, Implementing Sign Up, Implementing Logout\"}]},{\"@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 Spring Security, Implementing Sign Up, Implementing Logout - \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\/33183\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Implementing Sign Up, Implementing Logout - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Implementing Login\/Logout and Sign Up with Spring Security Hello! In this tutorial, we will explore backend development using Spring Boot. The main goal of this tutorial is to implement login\/logout and sign-up functionalities using Spring Security. The entire process will proceed through the following steps. Setting up a Spring Boot project Configuring Spring Security Implementing &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Implementing Sign Up, Implementing Logout\"","og_url":"https:\/\/atmokpo.com\/w\/33183\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:14:22+00:00","article_modified_time":"2024-11-01T11:28:35+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":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/33183\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33183\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Implementing Sign Up, Implementing Logout","datePublished":"2024-11-01T09:14:22+00:00","dateModified":"2024-11-01T11:28:35+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33183\/"},"wordCount":397,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33183\/","url":"https:\/\/atmokpo.com\/w\/33183\/","name":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Implementing Sign Up, Implementing Logout - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:14:22+00:00","dateModified":"2024-11-01T11:28:35+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33183\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33183\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33183\/#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 Spring Security, Implementing Sign Up, Implementing Logout"}]},{"@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\/33183","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=33183"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33183\/revisions"}],"predecessor-version":[{"id":33184,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33183\/revisions\/33184"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}