{"id":33213,"date":"2024-11-01T09:14:35","date_gmt":"2024-11-01T09:14:35","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33213"},"modified":"2024-11-01T11:28:26","modified_gmt":"2024-11-01T11:28:26","slug":"spring-boot-backend-development-course-implementing-login-and-logout-with-spring-security-adding-environment-variables-for-testing","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33213\/","title":{"rendered":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Environment Variables for Testing"},"content":{"rendered":"<p>This course will provide a detailed explanation of how to develop a backend application using Spring Boot. The main topics include implementing user registration and login\/logout features, using Spring Security, and setting up test environment variables.<\/p>\n<h2>1. What is Spring Boot?<\/h2>\n<p>Spring Boot is a tool that helps make the Spring framework easier to use, allowing for quick and easy application development. By using Spring Boot, applications can be easily run with minimal configuration, and it provides a variety of starter dependencies to enhance development convenience.<\/p>\n<h2>2. Introduction to Spring Security<\/h2>\n<p>Spring Security is a framework responsible for securing Spring-based applications. It provides authentication and authorization features to strengthen the application&#8217;s security. In this course, we will implement user registration, login, and logout through Spring Security.<\/p>\n<h2>3. Project Setup<\/h2>\n<p>To start the project, visit the Spring Boot initialization website (<a href=\"https:\/\/start.spring.io\/\">Spring Initializr<\/a>), add the necessary dependencies, and create a new project. The following are the key dependencies to add:<\/p>\n<ul>\n<li>Spring Web<\/li>\n<li>Spring Security<\/li>\n<li>Spring Data JPA<\/li>\n<li>Spring Boot DevTools<\/li>\n<li>H2 Database (used for testing)<\/li>\n<\/ul>\n<h2>4. Implementing User Registration Functionality<\/h2>\n<h3>4.1. Creating the Entity Class<\/h3>\n<p>We will create a User entity class for the user registration functionality. This class will be used to store user information.<\/p>\n<pre><code>package com.example.demo.model;\n\nimport javax.persistence.*;\n\n@Entity\npublic class User {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n    \n    @Column(nullable = false, unique = true)\n    private String username;\n    \n    @Column(nullable = false)\n    private String password;\n    \n    public User() {}\n    \n    public User(String username, String password) {\n        this.username = username;\n        this.password = password;\n    }\n    \n    \/\/ getters and setters\n}\n<\/code><\/pre>\n<h3>4.2. Creating the Repository Interface<\/h3>\n<p>Create a JPA repository for the User entity.<\/p>\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<h3>4.3. Writing the Service Class<\/h3>\n<p>We will create a service class to handle the business logic related to users.<\/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    @Autowired\n    private UserRepository userRepository;\n    \n    @Autowired\n    private PasswordEncoder passwordEncoder;\n    \n    public User registerUser(String username, String password) {\n        User user = new User(username, passwordEncoder.encode(password));\n        return userRepository.save(user);\n    }\n}\n<\/code><\/pre>\n<h3>4.4. Implementing the Registration API<\/h3>\n<p>We will implement a RESTful API to handle user requests.<\/p>\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.web.bind.annotation.*;\n\n@RestController\n@RequestMapping(\"\/api\/auth\")\npublic class AuthController {\n    @Autowired\n    private UserService userService;\n    \n    @PostMapping(\"\/register\")\n    public User register(@RequestParam String username, @RequestParam String password) {\n        return userService.registerUser(username, password);\n    }\n}\n<\/code><\/pre>\n<h2>5. Implementing Login and Logout Functionality<\/h2>\n<h3>5.1. Configuring Spring Security<\/h3>\n<p>We will configure Spring Security and add a filter to handle user authentication.<\/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    @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(\"\/api\/auth\/register\").permitAll()\n            .anyRequest().authenticated()\n            .and()\n            .httpBasic();\n    }\n    \n    @Bean\n    public PasswordEncoder passwordEncoder() {\n        return new BCryptPasswordEncoder();\n    }\n}\n<\/code><\/pre>\n<h3>5.2. Implementing the Login API<\/h3>\n<p>The login feature will be implemented through HTTP Basic Authentication. When a user sends authentication information (username and password) to the `\/api\/auth\/login` endpoint, Spring Security will process it.<\/p>\n<h3>5.3. Implementing the Logout API<\/h3>\n<p>Logout will be implemented by invalidating the HTTP session. When a user sends a request to the `\/api\/auth\/logout` endpoint, the session will be invalidated.<\/p>\n<h2>6. Adding Environment Variables for Testing<\/h2>\n<p>To manage sensitive information or configurations in the testing environment, we will create an `application-test.properties` file and set the environment variables.<\/p>\n<pre><code># application-test.properties\nspring.datasource.url=jdbc:h2:mem:testdb\nspring.datasource.driverClassName=org.h2.Driver\nspring.datasource.username=sa\nspring.datasource.password=password\nspring.jpa.hibernate.ddl-auto=create-drop\n<\/code><\/pre>\n<h2>7. Writing Test Cases<\/h2>\n<p>We will add test cases for the API using JUnit and Mockito. The test cases can be written for the UserService and AuthController.<\/p>\n<h3>7.1. Testing UserService<\/h3>\n<pre><code>package com.example.demo.service;\n\nimport com.example.demo.model.User;\nimport com.example.demo.repository.UserRepository;\nimport org.junit.jupiter.api.Test;\nimport org.mockito.InjectMocks;\nimport org.mockito.Mock;\nimport org.mockito.MockitoAnnotations;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.security.crypto.password.PasswordEncoder;\n\nimport static org.mockito.Mockito.*;\n\n@SpringBootTest\npublic class UserServiceTest {\n    @InjectMocks\n    private UserService userService;\n    \n    @Mock\n    private UserRepository userRepository;\n    \n    @Mock\n    private PasswordEncoder passwordEncoder;\n    \n    @BeforeEach\n    public void setUp() {\n        MockitoAnnotations.openMocks(this);\n    }\n    \n    @Test\n    public void testRegisterUser() {\n        when(passwordEncoder.encode(\"password\")).thenReturn(\"encodedPassword\");\n        when(userRepository.save(any(User.class))).thenReturn(new User(\"username\", \"encodedPassword\"));\n        \n        User user = userService.registerUser(\"username\", \"password\");\n        \n        assertEquals(\"username\", user.getUsername());\n        verify(userRepository).save(any(User.class));\n    }\n}\n<\/code><\/pre>\n<h2>8. Conclusion<\/h2>\n<p>In this course, we learned how to apply Spring Security for user registration, login, and logout functionality in a backend application based on Spring Boot. We also explored how to add test environment variables and write test cases to improve the application&#8217;s quality. Based on this foundation, we encourage you to add more complex features and apply them in real-world projects.<\/p>\n<h2>9. References<\/h2>\n<ul>\n<li><a href=\"https:\/\/spring.io\/projects\/spring-boot\">Official Documentation of Spring Boot<\/a><\/li>\n<li><a href=\"https:\/\/spring.io\/projects\/spring-security\">Official Documentation of Spring Security<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This course will provide a detailed explanation of how to develop a backend application using Spring Boot. The main topics include implementing user registration and login\/logout features, using Spring Security, and setting up test environment variables. 1. What is Spring Boot? Spring Boot is a tool that helps make the Spring framework easier to use, &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33213\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Environment Variables for Testing&#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-33213","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, Adding Environment Variables for Testing - \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\/33213\/\" \/>\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, Adding Environment Variables for Testing - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"This course will provide a detailed explanation of how to develop a backend application using Spring Boot. The main topics include implementing user registration and login\/logout features, using Spring Security, and setting up test environment variables. 1. What is Spring Boot? Spring Boot is a tool that helps make the Spring framework easier to use, &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Environment Variables for Testing&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33213\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:14:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:28:26+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\/33213\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33213\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Environment Variables for Testing\",\"datePublished\":\"2024-11-01T09:14:35+00:00\",\"dateModified\":\"2024-11-01T11:28:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33213\/\"},\"wordCount\":476,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33213\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33213\/\",\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Environment Variables for Testing - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:14:35+00:00\",\"dateModified\":\"2024-11-01T11:28:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33213\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33213\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33213\/#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, Adding Environment Variables for Testing\"}]},{\"@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, Adding Environment Variables for Testing - \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\/33213\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Environment Variables for Testing - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"This course will provide a detailed explanation of how to develop a backend application using Spring Boot. The main topics include implementing user registration and login\/logout features, using Spring Security, and setting up test environment variables. 1. What is Spring Boot? Spring Boot is a tool that helps make the Spring framework easier to use, &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Environment Variables for Testing\"","og_url":"https:\/\/atmokpo.com\/w\/33213\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:14:35+00:00","article_modified_time":"2024-11-01T11:28:26+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\/33213\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33213\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Environment Variables for Testing","datePublished":"2024-11-01T09:14:35+00:00","dateModified":"2024-11-01T11:28:26+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33213\/"},"wordCount":476,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33213\/","url":"https:\/\/atmokpo.com\/w\/33213\/","name":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Environment Variables for Testing - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:14:35+00:00","dateModified":"2024-11-01T11:28:26+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33213\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33213\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33213\/#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, Adding Environment Variables for Testing"}]},{"@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\/33213","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=33213"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33213\/revisions"}],"predecessor-version":[{"id":33214,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33213\/revisions\/33214"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}