{"id":33185,"date":"2024-11-01T09:14:23","date_gmt":"2024-11-01T09:14:23","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33185"},"modified":"2024-11-01T11:28:34","modified_gmt":"2024-11-01T11:28:34","slug":"spring-boot-backend-development-course-implementing-login-and-logout-with-spring-security-adding-logout-method","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33185\/","title":{"rendered":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Logout Method"},"content":{"rendered":"<p><body><\/p>\n<p>In this course, we will cover authentication and authorization features to allow users to access applications in modern web applications. Specifically, we will implement user login, logout, and membership registration features using <strong>Spring Boot<\/strong> and <strong>Spring Security<\/strong>. This process will include basic features frequently used in real web services and will greatly help in understanding the importance of security.<\/p>\n<h2>Table of Contents<\/h2>\n<ol>\n<li><a href=\"#spring-boot-intro\">Overview of Spring Boot<\/a><\/li>\n<li><a href=\"#spring-security-intro\">Introduction to Spring Security<\/a><\/li>\n<li><a href=\"#project-setup\">Project Setup<\/a><\/li>\n<li><a href=\"#membership-registration\">Implementing Membership Registration<\/a><\/li>\n<li><a href=\"#login-logout\">Implementing Login and Logout<\/a><\/li>\n<li><a href=\"#logout-method\">Adding Logout Method<\/a><\/li>\n<li><a href=\"#summary\">Course Summary<\/a><\/li>\n<\/ol>\n<h2 id=\"spring-boot-intro\">1. Overview of Spring Boot<\/h2>\n<p>Spring Boot is an extension of the Spring Framework designed to enable rapid development. It helps to easily start applications without complex configurations, and you can easily add necessary libraries through the starter packages provided on the <a href=\"https:\/\/spring.io\/projects\/spring-boot\">official Spring Boot website<\/a>.<\/p>\n<p>Why use Spring Boot? One of the biggest advantages of Spring Boot is <strong>dependency management<\/strong>. You only need to configure the <code>pom.xml<\/code> file that includes various libraries, and it can automatically download the necessary dependencies as needed. Set it up simply and focus on implementing your ideas.<\/p>\n<h2 id=\"spring-security-intro\">2. Introduction to Spring Security<\/h2>\n<p>Spring Security is a powerful framework responsible for the authentication and authorization of applications. With Spring Security, you can easily implement the following features:<\/p>\n<ul>\n<li>User authentication: login functionality using username and password<\/li>\n<li>Authorization for authenticated users<\/li>\n<li>CSRF protection<\/li>\n<li>Session management<\/li>\n<\/ul>\n<p>Spring Security is very powerful in itself, but you can enjoy even more advantages when integrated with Spring Boot. It can be set up quickly and easily, and it allows for easier management of security issues.<\/p>\n<h2 id=\"project-setup\">3. Project Setup<\/h2>\n<p>Create a new web application using Spring Boot. Follow the steps below to set up the project.<\/p>\n<h3>3.1. Using Spring Initializr<\/h3>\n<p>You can create a new Spring Boot project using Spring Initializr (<a href=\"https:\/\/start.spring.io\/\">start.spring.io<\/a>). Select the following dependencies:<\/p>\n<ul>\n<li>Spring Web<\/li>\n<li>Spring Security<\/li>\n<li>Spring Data JPA<\/li>\n<li>H2 Database<\/li>\n<p> <!-- or a real database like MySQL, PostgreSQL -->\n<\/ul>\n<h3>3.2. Project Code Structure<\/h3>\n<p>After creating the project, maintain the following basic code structure:<\/p>\n<pre>\nsrc\n\u251c\u2500\u2500 main\n\u2502   \u251c\u2500\u2500 java\n\u2502   \u2502   \u2514\u2500\u2500 com\n\u2502   \u2502       \u2514\u2500\u2500 example\n\u2502   \u2502           \u2514\u2500\u2500 demo\n\u2502   \u2502               \u251c\u2500\u2500 DemoApplication.java\n\u2502   \u2502               \u251c\u2500\u2500 config\n\u2502   \u2502               \u2502   \u2514\u2500\u2500 SecurityConfig.java\n\u2502   \u2502               \u251c\u2500\u2500 controller\n\u2502   \u2502               \u2502   \u2514\u2500\u2500 UserController.java\n\u2502   \u2502               \u251c\u2500\u2500 model\n\u2502   \u2502               \u2502   \u2514\u2500\u2500 User.java\n\u2502   \u2502               \u2514\u2500\u2500 repository\n\u2502   \u2502                   \u2514\u2500\u2500 UserRepository.java\n\u2502   \u2514\u2500\u2500 resources\n\u2502       \u251c\u2500\u2500 application.properties\n\u2502       \u2514\u2500\u2500 templates\n\u2514\u2500\u2500 test\n<\/pre>\n<h2 id=\"membership-registration\">4. Implementing Membership Registration<\/h2>\n<p>To implement the membership registration feature, we will define the <code>User<\/code> model and <code>UserRepository<\/code>, and then create the <code>UserController<\/code> to handle registration.<\/p>\n<h3>4.1. Defining the User Model<\/h3>\n<pre><code>\npackage 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.AUTO)\n    private Long id;\n    private String username;\n    private String password;\n\n    \/\/ Getters and Setters omitted\n}\n<\/code><\/pre>\n<h3>4.2. Implementing the UserRepository Interface<\/h3>\n<pre><code>\npackage 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. Implementing the UserController<\/h3>\n<pre><code>\npackage com.example.demo.controller;\n\nimport com.example.demo.model.User;\nimport com.example.demo.repository.UserRepository;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport javax.validation.Valid;\n\n@Controller\n@RequestMapping(\"\/signup\")\npublic class UserController {\n    @Autowired\n    private UserRepository userRepository;\n\n    @GetMapping\n    public String showSignupForm() {\n        return \"signup\"; \/\/ signup.html\n    }\n\n    @PostMapping\n    public String registerUser(@Valid User user) {\n        userRepository.save(user);\n        return \"redirect:\/login\"; \/\/ Redirect to login page after registration\n    }\n}\n<\/code><\/pre>\n<h3>4.4. Creating Membership Registration HTML Form<\/h3>\n<p>Create a <code>resources\/templates\/signup.html<\/code> file and write the following.<\/p>\n<pre><code>\n<!DOCTYPE html>\n\n<html>\n<head>\n    <meta charset=\"utf-8\"\/>\n    <title>Membership Registration<\/title>\n<\/head>\n<body>\n    <h1>Membership Registration<\/h1>\n    <form action=\"#\" method=\"post\" th:action=\"@{\/signup}\" th:object=\"${user}\">\n        <label for=\"username\">Username:<\/label>\n        <input id=\"username\" required=\"\" th:field=\"*{username}\" type=\"text\"\/>\n        <br\/>\n        <label for=\"password\">Password:<\/label>\n        <input id=\"password\" required=\"\" th:field=\"*{password}\" type=\"password\"\/>\n        <br\/>\n        <button type=\"submit\">Register<\/button>\n    <\/form>\n<\/body>\n<\/html>\n<\/code><\/pre>\n<h2 id=\"login-logout\">5. Implementing Login and Logout<\/h2>\n<p>Now, let&#8217;s set up Spring Security to allow users to log in. We need to handle the authentication logic and set the target to redirect after login.<\/p>\n<h3>5.1. Configuring the SecurityConfig Class<\/h3>\n<pre><code>\npackage 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(HttpSecurity http) throws Exception {\n        http\n            .authorizeRequests()\n                .antMatchers(\"\/signup\").permitAll() \/\/ Membership registration page is accessible to all\n                .anyRequest().authenticated() \/\/ Other requests require authentication\n            .and()\n                .formLogin()\n                .loginPage(\"\/login\") \/\/ Custom login page\n                .permitAll()\n            .and()\n                .logout()\n                .permitAll();\n    }\n\n    @Autowired\n    protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {\n        auth.userDetailsService(userDetailsService()).passwordEncoder(passwordEncoder());\n    }\n\n    @Bean\n    public PasswordEncoder passwordEncoder() {\n        return new BCryptPasswordEncoder();\n    }\n}\n<\/code><\/pre>\n<h3>5.2. Creating the Login Page<\/h3>\n<p>Create a <code>resources\/templates\/login.html<\/code> file to add a custom login page.<\/p>\n<pre><code>\n<!DOCTYPE html>\n\n<html>\n<head>\n    <meta charset=\"utf-8\"\/>\n    <title>Login<\/title>\n<\/head>\n<body>\n    <h1>Login<\/h1>\n    <form action=\"#\" method=\"post\" th:action=\"@{\/login}\">\n        <label for=\"username\">Username:<\/label>\n        <input id=\"username\" name=\"username\" required=\"\" type=\"text\"\/>\n        <br\/>\n        <label for=\"password\">Password:<\/label>\n        <input id=\"password\" name=\"password\" required=\"\" type=\"password\"\/>\n        <br\/>\n        <button type=\"submit\">Login<\/button>\n    <\/form>\n<\/body>\n<\/html>\n<\/code><\/pre>\n<h2 id=\"logout-method\">6. Adding Logout Method<\/h2>\n<p>The logout feature is provided by Spring Security by default, but additional customization may be needed. Set the URL for logging out and the URL to redirect after log out.<\/p>\n<h3>6.1. Configuring the Logout URL<\/h3>\n<pre><code>\n@Configuration\n@EnableWebSecurity\npublic class SecurityConfig extends WebSecurityConfigurerAdapter {\n    @Override\n    protected void configure(HttpSecurity http) throws Exception {\n        http\n            .logout()\n                .logoutUrl(\"\/logout\") \/\/ Logout URL\n                .logoutSuccessUrl(\"\/login?logout\") \/\/ URL to redirect after logout success\n                .invalidateHttpSession(true) \/\/ Invalidate session\n                .clearAuthentication(true); \/\/ Clear authentication information\n    }\n}\n<\/code><\/pre>\n<h3>6.2. Adding a Logout Button<\/h3>\n<p>After logging in, let&#8217;s add a logout button to allow easy logout. Add the following in <code>resources\/templates\/index.html<\/code>.<\/p>\n<pre><code>\n<body>\n    <h1>Welcome!<\/h1>\n    <form action=\"#\" method=\"post\" th:action=\"@{\/logout}\">\n        <button type=\"submit\">Logout<\/button>\n    <\/form>\n<\/body>\n<\/code><\/pre>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this course, we will cover authentication and authorization features to allow users to access applications in modern web applications. Specifically, we will implement user login, logout, and membership registration features using Spring Boot and Spring Security. This process will include basic features frequently used in real web services and will greatly help in understanding &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33185\/\" 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 Logout Method&#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-33185","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 Logout Method - \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\/33185\/\" \/>\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 Logout Method - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In this course, we will cover authentication and authorization features to allow users to access applications in modern web applications. Specifically, we will implement user login, logout, and membership registration features using Spring Boot and Spring Security. This process will include basic features frequently used in real web services and will greatly help in understanding &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Logout Method&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33185\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:14:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:28:34+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=\"4\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/33185\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33185\/\"},\"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 Logout Method\",\"datePublished\":\"2024-11-01T09:14:23+00:00\",\"dateModified\":\"2024-11-01T11:28:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33185\/\"},\"wordCount\":484,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33185\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33185\/\",\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Logout Method - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:14:23+00:00\",\"dateModified\":\"2024-11-01T11:28:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33185\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33185\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33185\/#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 Logout Method\"}]},{\"@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 Logout Method - \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\/33185\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Logout Method - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In this course, we will cover authentication and authorization features to allow users to access applications in modern web applications. Specifically, we will implement user login, logout, and membership registration features using Spring Boot and Spring Security. This process will include basic features frequently used in real web services and will greatly help in understanding &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Logout Method\"","og_url":"https:\/\/atmokpo.com\/w\/33185\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:14:23+00:00","article_modified_time":"2024-11-01T11:28:34+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":"4\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/33185\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33185\/"},"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 Logout Method","datePublished":"2024-11-01T09:14:23+00:00","dateModified":"2024-11-01T11:28:34+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33185\/"},"wordCount":484,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33185\/","url":"https:\/\/atmokpo.com\/w\/33185\/","name":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, Adding Logout Method - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:14:23+00:00","dateModified":"2024-11-01T11:28:34+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33185\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33185\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33185\/#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 Logout Method"}]},{"@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\/33185","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=33185"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33185\/revisions"}],"predecessor-version":[{"id":33186,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33185\/revisions\/33186"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}