{"id":33191,"date":"2024-11-01T09:14:26","date_gmt":"2024-11-01T09:14:26","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33191"},"modified":"2024-11-01T11:28:32","modified_gmt":"2024-11-01T11:28:32","slug":"spring-boot-backend-development-course-implementing-login-and-logout-with-spring-security-user-registration-testing-login-and-user-registration","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33191\/","title":{"rendered":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Testing Login and User Registration"},"content":{"rendered":"<div class=\"post\">\n<h2>Implementing Login\/Logout and User Registration with Spring Security<\/h2>\n<p>Hello, today we will conduct a backend development course using Spring Boot. In this course, we will take a detailed look at how to implement login and logout functionalities, as well as user registration using Spring Security. Spring Boot is a framework that allows for rapid and easy development of Java-based web applications, and we will be covering the process of building powerful and secure web applications through it.<\/p>\n<h3>1. Setting Up the Development Environment<\/h3>\n<p>Before we start the course, we need to set up the development environment. Below are the necessary tools and setup methods.<\/p>\n<ul>\n<li>Java Development Kit (JDK) 11 or higher<\/li>\n<li>Spring Boot 2.5.x or higher<\/li>\n<li>IDE such as IntelliJ IDEA or Eclipse<\/li>\n<li>Gradle or Maven (build tool)<\/li>\n<li>H2 Database (embedded database)<\/li>\n<\/ul>\n<h3>2. Creating a Spring Boot Project<\/h3>\n<p>To create a Spring Boot project, we will use Spring Initializr. Please follow the steps below to set up the project.<\/p>\n<ol>\n<li>Access <a href=\"https:\/\/start.spring.io\">Spring Initializr<\/a> in your web browser.<\/li>\n<li>Enter the project metadata.<\/li>\n<ul>\n<li>Project: Maven Project or Gradle Project<\/li>\n<li>Language: Java<\/li>\n<li>Spring Boot: Set to 2.x.x<\/li>\n<li>Group: com.example<\/li>\n<li>Artifact: demo<\/li>\n<li>Name: demo<\/li>\n<li>Description: Spring Boot demo project<\/li>\n<li>Package name: com.example.demo<\/li>\n<li>Packaging: Jar<\/li>\n<li>Java: 11<\/li>\n<\/ul>\n<li>Select the following under Dependencies.<\/li>\n<ul>\n<li>Spring Web<\/li>\n<li>Spring Security<\/li>\n<li>Spring Data JPA<\/li>\n<li>H2 Database<\/li>\n<\/ul>\n<li>Click the Generate button to download the project ZIP file.<\/li>\n<\/ol>\n<h3>3. Project Structure<\/h3>\n<p>When you open the project, a basic package structure is created. Here\u2019s an explanation of the roles of the main directories and files.<\/p>\n<ul>\n<li><strong>src\/main\/java\/com\/example\/demo<\/strong>: Directory where Java source files are located.<\/li>\n<li><strong>src\/main\/resources\/application.properties<\/strong>: Application settings file.<\/li>\n<li><strong>src\/test\/java\/com\/example\/demo<\/strong>: Directory where test files are located.<\/li>\n<\/ul>\n<h3>4. Configuring Spring Security<\/h3>\n<p>We will set up Spring Security to implement the login and logout functionalities.<\/p>\n<h4>4.1 Adding Dependencies<\/h4>\n<p>Add the necessary dependencies to the pom.xml or build.gradle file. If you are using Maven, please add the following dependency.<\/p>\n<pre>\n        <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        <\/code>\n    <\/pre>\n<h4>4.2 Creating SecurityConfig Class<\/h4>\n<p>Create a SecurityConfig class to define the configuration for Spring Security.<\/p>\n<pre>\n        <code>\n            package com.example.demo.config;\n\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(\"\/register\", \"\/h2-console\/**\").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 void init() {\n                    \/\/ Configuration for using H2 Console\n                    java.sql.Connection conn = DriverManager.getConnection(\"jdbc:h2:mem:testdb\", \"sa\", \"\");\n                    conn.createStatement().execute(\"SET MODE MySQL\");\n                }\n            }\n        <\/code>\n    <\/pre>\n<h3>5. Implementing User Registration Functionality<\/h3>\n<p>Now we will implement basic user registration functionality.<\/p>\n<h4>5.1 Creating User Entity<\/h4>\n<p>Create a User entity class to store user information.<\/p>\n<pre>\n        <code>\n            package com.example.demo.model;\n\n            import javax.persistence.Entity;\n            import javax.persistence.GeneratedValue;\n            import javax.persistence.GenerationType;\n            import javax.persistence.Id;\n\n            @Entity\n            public class User {\n                @Id\n                @GeneratedValue(strategy = GenerationType.IDENTITY)\n                private Long id;\n\n                private String username;\n                private String password;\n\n                \/\/ getters and setters\n            }\n        <\/code>\n    <\/pre>\n<h4>5.2 Creating UserRepository Interface<\/h4>\n<p>Create a UserRepository to manage user information.<\/p>\n<pre>\n        <code>\n            package com.example.demo.repository;\n\n            import com.example.demo.model.User;\n            import org.springframework.data.jpa.repository.JpaRepository;\n\n            public interface UserRepository extends JpaRepository<User, Long> {\n                User findByUsername(String username);\n            }\n        <\/code>\n    <\/pre>\n<h4>5.3 Creating UserService Class<\/h4>\n<p>Create a UserService class to handle the user registration logic.<\/p>\n<pre>\n        <code>\n            package com.example.demo.service;\n\n            import com.example.demo.model.User;\n            import com.example.demo.repository.UserRepository;\n            import org.springframework.beans.factory.annotation.Autowired;\n            import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;\n            import org.springframework.stereotype.Service;\n\n            @Service\n            public class UserService {\n                @Autowired\n                private UserRepository userRepository;\n\n                @Autowired\n                private BCryptPasswordEncoder passwordEncoder;\n\n                public void register(User user) {\n                    user.setPassword(passwordEncoder.encode(user.getPassword()));\n                    userRepository.save(user);\n                }\n\n                public User findByUsername(String username) {\n                    return userRepository.findByUsername(username);\n                }\n            }\n        <\/code>\n    <\/pre>\n<h4>5.4 Creating RegistrationController Class<\/h4>\n<p>Create a RegistrationController class to handle the user registration page and logic.<\/p>\n<pre>\n        <code>\n            package com.example.demo.controller;\n\n            import com.example.demo.model.User;\n            import com.example.demo.service.UserService;\n            import org.springframework.beans.factory.annotation.Autowired;\n            import org.springframework.stereotype.Controller;\n            import org.springframework.ui.Model;\n            import org.springframework.web.bind.annotation.GetMapping;\n            import org.springframework.web.bind.annotation.PostMapping;\n            import org.springframework.web.bind.annotation.ModelAttribute;\n\n            @Controller\n            public class RegistrationController {\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(@ModelAttribute User user) {\n                    userService.register(user);\n                    return \"redirect:\/login\";\n                }\n            }\n        <\/code>\n    <\/pre>\n<h4>5.5 Creating HTML View Template<\/h4>\n<p>Create the user registration HTML view. Write the following in the templates\/register.html file.<\/p>\n<pre>\n        <code>\n            &lt;!DOCTYPE html&gt;\n            &lt;html xmlns:th=\"http:\/\/www.thymeleaf.org\"&gt;\n            &lt;head&gt;\n                &lt;title&gt;User Registration&lt;\/title&gt;\n            &lt;\/head&gt;\n            &lt;body&gt;\n                &lt;h1&gt;User Registration&lt;\/h1&gt;\n                &lt;form action=\"#\" th:action=\"@{\/register}\" th:object=\"${user}\" method=\"post\"&gt;\n                    &lt;div&gt;\n                        &lt;label for=\"username\"&gt;Username:&lt;\/label&gt;\n                        &lt;input type=\"text\" th:field=\"*{username}\" required\/&gt;\n                    &lt;\/div&gt;\n                    &lt;div&gt;\n                        &lt;label for=\"password\"&gt;Password:&lt;\/label&gt;\n                        &lt;input type=\"password\" th:field=\"*{password}\" required\/&gt;\n                    &lt;\/div&gt;\n                    &lt;div&gt;\n                        &lt;button type=\"submit\"&gt;Register&lt;\/button&gt;\n                    &lt;\/div&gt;\n                &lt;\/form&gt;\n            &lt;\/body&gt;\n            &lt;\/html&gt;\n        <\/code>\n    <\/pre>\n<h3>6. Implementing Login Functionality<\/h3>\n<p>Now we will implement the login feature. Since Spring Security handles user authentication, we only need to implement parts related to user information.<\/p>\n<h4>6.1 Modifying SecurityConfig<\/h4>\n<p>Set the user authentication information in SecurityConfig.<\/p>\n<pre>\n        <code>\n            import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;\n\n            @Override\n            protected void configure(AuthenticationManagerBuilder auth) throws Exception {\n                auth.userDetailsService(userDetailsService())\n                    .passwordEncoder(passwordEncoder());\n            }\n        <\/code>\n    <\/pre>\n<h4>6.2 Implementing UserDetailsService<\/h4>\n<p>Create a UserDetailsService to handle user authentication information.<\/p>\n<pre>\n        <code>\n            package com.example.demo.service;\n\n            import org.springframework.security.core.userdetails.UserDetails;\n            import org.springframework.security.core.userdetails.UserDetailsService;\n            import org.springframework.security.core.userdetails.UsernameNotFoundException;\n            import org.springframework.stereotype.Service;\n\n            @Service\n            public class CustomUserDetailsService implements UserDetailsService {\n                \n                @Autowired\n                private UserService userService;\n\n                @Override\n                public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {\n                    User user = userService.findByUsername(username);\n                    if (user == null) {\n                        throw new UsernameNotFoundException(\"Cannot find user: \" + username);\n                    }\n                    return org.springframework.security.core.userdetails.User.withUsername(user.getUsername())\n                            .password(user.getPassword())\n                            .roles(\"USER\")\n                            .build();\n                }\n            }\n        <\/code>\n    <\/pre>\n<h3>7. Login and Logout Pages<\/h3>\n<p>Implement the login page and logout confirmation page.<\/p>\n<h4>7.1 Creating login.html Template<\/h4>\n<pre>\n        <code>\n            &lt;!DOCTYPE html&gt;\n            &lt;html xmlns:th=\"http:\/\/www.thymeleaf.org\"&gt;\n            &lt;head&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=\"#\" th:action=\"@{\/login}\" method=\"post\"&gt;\n                    &lt;div&gt;\n                        &lt;label for=\"username\"&gt;Username:&lt;\/label&gt;\n                        &lt;input type=\"text\" name=\"username\" required\/&gt;\n                    &lt;\/div&gt;\n                    &lt;div&gt;\n                        &lt;label for=\"password\"&gt;Password:&lt;\/label&gt;\n                        &lt;input type=\"password\" name=\"password\" required\/&gt;\n                    &lt;\/div&gt;\n                    &lt;div&gt;\n                        &lt;button type=\"submit\"&gt;Login&lt;\/button&gt;\n                    &lt;\/div&gt;\n                &lt;\/form&gt;\n            &lt;\/body&gt;\n            &lt;\/html&gt;\n        <\/code>\n    <\/pre>\n<h4>7.2 Creating logout.html Template<\/h4>\n<pre>\n        <code>\n            &lt;!DOCTYPE html&gt;\n            &lt;html xmlns:th=\"http:\/\/www.thymeleaf.org\"&gt;\n            &lt;head&gt;\n                &lt;title&gt;Logout&lt;\/title&gt;\n            &lt;\/head&gt;\n            &lt;body&gt;\n                &lt;h1&gt;You have been logged out.&lt;\/h1&gt;\n                &lt;a href=\"\/login\"&gt;Go to login page&lt;\/a&gt;\n            &lt;\/body&gt;\n            &lt;\/html&gt;\n        <\/code>\n    <\/pre>\n<h3>8. Running and Testing<\/h3>\n<p>Now that we have completed all the settings and implementations, let&#8217;s run and test the application.<\/p>\n<h4>8.1 Running the Application<\/h4>\n<p>Run the application. Execute the following command through the IDE&#8217;s Run command or Terminal.<\/p>\n<pre>\n        <code>\n            .\/mvnw spring-boot:run\n        <\/code>\n    <\/pre>\n<p>In the browser, enter <strong>http:\/\/localhost:8080\/register<\/strong> to navigate to the user registration page.<\/p>\n<h4>8.2 Testing User Registration<\/h4>\n<p>Test user registration by entering a username and password. After registration, proceed to <strong>http:\/\/localhost:8080\/login<\/strong> and test the login functionality.<\/p>\n<h4>8.3 Testing Login and Logout<\/h4>\n<p>After logging in successfully, click the logout button to check if the logout works properly.<\/p>\n<h3>9. Conclusion<\/h3>\n<p>In this course, we learned how to implement login, logout, and user registration functions using Spring Security with Spring Boot. With these fundamental features, you have laid the foundation for securely operating your own web application. Explore additional features using Spring Boot to develop a more advanced web application!<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Implementing Login\/Logout and User Registration with Spring Security Hello, today we will conduct a backend development course using Spring Boot. In this course, we will take a detailed look at how to implement login and logout functionalities, as well as user registration using Spring Security. Spring Boot is a framework that allows for rapid and &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33191\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Testing Login and User Registration&#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-33191","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, User Registration, Testing Login and User Registration - \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\/33191\/\" \/>\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, User Registration, Testing Login and User Registration - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Implementing Login\/Logout and User Registration with Spring Security Hello, today we will conduct a backend development course using Spring Boot. In this course, we will take a detailed look at how to implement login and logout functionalities, as well as user registration using Spring Security. Spring Boot is a framework that allows for rapid and &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Testing Login and User Registration&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33191\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:14:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:28:32+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=\"7\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/33191\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33191\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Testing Login and User Registration\",\"datePublished\":\"2024-11-01T09:14:26+00:00\",\"dateModified\":\"2024-11-01T11:28:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33191\/\"},\"wordCount\":649,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33191\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33191\/\",\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Testing Login and User Registration - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:14:26+00:00\",\"dateModified\":\"2024-11-01T11:28:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33191\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33191\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33191\/#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, User Registration, Testing Login and User Registration\"}]},{\"@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, User Registration, Testing Login and User Registration - \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\/33191\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Testing Login and User Registration - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Implementing Login\/Logout and User Registration with Spring Security Hello, today we will conduct a backend development course using Spring Boot. In this course, we will take a detailed look at how to implement login and logout functionalities, as well as user registration using Spring Security. Spring Boot is a framework that allows for rapid and &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Testing Login and User Registration\"","og_url":"https:\/\/atmokpo.com\/w\/33191\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:14:26+00:00","article_modified_time":"2024-11-01T11:28:32+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":"7\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/33191\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33191\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Testing Login and User Registration","datePublished":"2024-11-01T09:14:26+00:00","dateModified":"2024-11-01T11:28:32+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33191\/"},"wordCount":649,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33191\/","url":"https:\/\/atmokpo.com\/w\/33191\/","name":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Testing Login and User Registration - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:14:26+00:00","dateModified":"2024-11-01T11:28:32+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33191\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33191\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33191\/#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, User Registration, Testing Login and User Registration"}]},{"@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\/33191","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=33191"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33191\/revisions"}],"predecessor-version":[{"id":33192,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33191\/revisions\/33192"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}