{"id":33219,"date":"2024-11-01T09:14:38","date_gmt":"2024-11-01T09:14:38","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33219"},"modified":"2024-11-01T11:28:24","modified_gmt":"2024-11-01T11:28:24","slug":"spring-boot-backend-development-course-implement-login-and-logout-with-spring-security-membership-registration-creating-member-domain","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33219\/","title":{"rendered":"Spring Boot Backend Development Course, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain"},"content":{"rendered":"<p>Hello! In this course, we will learn about backend development using Spring Boot, with a particular focus on implementing login, logout, and signup using Spring Security. This course is aimed at beginners and will cover real application development cases through practical exercises and examples. The course content generally includes the following:<\/p>\n<ul>\n<li>Introduction to Spring Boot<\/li>\n<li>Overview of Spring Security<\/li>\n<li>Creating a member domain<\/li>\n<li>Implementing signup functionality<\/li>\n<li>Implementing login and logout<\/li>\n<li>Using JWT tokens<\/li>\n<li>Testing and conclusion<\/li>\n<\/ul>\n<h2>1. Introduction to Spring Boot<\/h2>\n<p>Spring Boot is a lightweight application framework based on the Spring Framework that helps develop applications quickly and easily. Using Spring Boot allows for simple configuration without complex XML settings, significantly contributing to productivity.<\/p>\n<h2>2. Overview of Spring Security<\/h2>\n<p>Spring Security is a framework that provides security features for Spring-based applications. It offers various functions necessary for handling authentication and authorization, helping to enhance the security of web applications.<\/p>\n<h2>3. Creating a member domain<\/h2>\n<p>To create a member domain, we first need to define the necessary entities. In this course, we will create a Member domain and set the required fields. Below is an example code of the member entity:<\/p>\n<pre>\n<code> \nimport javax.persistence.*;\n\n@Entity\n@Table(name = \"members\")\npublic class Member {\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    @Column(nullable = false)\n    private String email;\n\n    \/\/ Getters and Setters\n}\n<\/code>\n<\/pre>\n<h2>4. Implementing signup functionality<\/h2>\n<p>Now, let&#8217;s implement the signup functionality. We will create a REST API to handle signup requests, allowing clients to send member information to the server. Below is the controller code for handling signup:<\/p>\n<pre>\n<code>\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.*;\n\n@RestController\n@RequestMapping(\"\/api\/members\")\npublic class MemberController {\n\n    @Autowired\n    private MemberService memberService;\n\n    @PostMapping(\"\/register\")\n    public ResponseEntity<String> register(@RequestBody Member member) {\n        memberService.register(member);\n        return new ResponseEntity<>(\"Signup successful\", HttpStatus.CREATED);\n    }\n}\n<\/code>\n<\/pre>\n<h2>5. Implementing login and logout<\/h2>\n<p>We will use Spring Security to implement the login functionality. This will allow us to handle authentication and maintain the logged-in state of users. We will add a configuration class for Spring Security:<\/p>\n<pre>\n<code>\nimport org.springframework.beans.factory.annotation.Autowired;\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;\n\n@Configuration\n@EnableWebSecurity\npublic class SecurityConfig extends WebSecurityConfigurerAdapter {\n\n    @Autowired\n    private CustomUserDetailsService customUserDetailsService;\n\n    @Override\n    protected void configure(AuthenticationManagerBuilder auth) throws Exception {\n        auth.userDetailsService(customUserDetailsService).passwordEncoder(passwordEncoder());\n    }\n\n    @Override\n    protected void configure(HttpSecurity http) throws Exception {\n        http\n            .csrf().disable()\n            .authorizeRequests()\n            .antMatchers(\"\/api\/members\/register\").permitAll()\n            .anyRequest().authenticated()\n            .and()\n            .formLogin()\n            .loginPage(\"\/login\")\n            .permitAll()\n            .and()\n            .logout()\n            .permitAll();\n    }\n\n    \/\/ PasswordEncoder bean configuration\n}\n<\/code>\n<\/pre>\n<h2>6. Using JWT tokens<\/h2>\n<p>JWT (JSON Web Token) is a token used for exchanging secure information. We will generate JWT during signup and login to authenticate users. We will add code to issue JWT in this process:<\/p>\n<pre>\n<code>\nimport io.jsonwebtoken.Jwts;\nimport io.jsonwebtoken.SignatureAlgorithm;\n\nimport java.util.Date;\n\npublic class JwtUtil {\n\n    private final String SECRET_KEY = \"secret\";\n\n    public String generateToken(String username) {\n        return Jwts.builder()\n                .setSubject(username)\n                .setIssuedAt(new Date(System.currentTimeMillis()))\n                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10)) \/\/ Valid for 10 hours\n                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)\n                .compact();\n    }\n}\n<\/code>\n<\/pre>\n<h2>7. Testing and conclusion<\/h2>\n<p>Now that all functionalities have been implemented, we will write unit tests to verify that everything works correctly. It is important to check that each feature operates as expected through testing. Below is a simple example of a unit test:<\/p>\n<pre>\n<code>\nimport static org.junit.jupiter.api.Assertions.*;\nimport org.junit.jupiter.api.Test;\n\npublic class MemberServiceTest {\n\n    @Test\n    public void testRegister() {\n        Member member = new Member(\"testuser\", \"password\", \"test@example.com\");\n        memberService.register(member);\n        assertNotNull(memberService.findMemberByUsername(\"testuser\"));\n    }\n}\n<\/code>\n<\/pre>\n<h2>Conclusion<\/h2>\n<p>In this course, we explored backend development methods using Spring Boot and how to implement login, logout, and signup functionalities using Spring Security. I hope this practical experience has been helpful for you. Now, you can implement stronger user management and security features in your application.<\/p>\n<h2>Reference Materials<\/h2>\n<ul>\n<li>Spring Official Documentation: <a href=\"https:\/\/spring.io\/docs\">spring.io\/docs<\/a><\/li>\n<li>Getting Started with Spring Boot: <a href=\"https:\/\/spring.io\/guides\/gs\/spring-boot\/\">spring.io\/guides\/gs\/spring-boot\/<\/a><\/li>\n<li>Spring Security Documentation: <a href=\"https:\/\/spring.io\/projects\/spring-security\">spring.io\/projects\/spring-security<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Hello! In this course, we will learn about backend development using Spring Boot, with a particular focus on implementing login, logout, and signup using Spring Security. This course is aimed at beginners and will cover real application development cases through practical exercises and examples. The course content generally includes the following: Introduction to Spring Boot &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33219\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Spring Boot Backend Development Course, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain&#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-33219","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, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain - \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\/33219\/\" \/>\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, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Hello! In this course, we will learn about backend development using Spring Boot, with a particular focus on implementing login, logout, and signup using Spring Security. This course is aimed at beginners and will cover real application development cases through practical exercises and examples. The course content generally includes the following: Introduction to Spring Boot &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33219\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:14:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:28:24+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\/33219\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33219\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Spring Boot Backend Development Course, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain\",\"datePublished\":\"2024-11-01T09:14:38+00:00\",\"dateModified\":\"2024-11-01T11:28:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33219\/\"},\"wordCount\":430,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33219\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33219\/\",\"name\":\"Spring Boot Backend Development Course, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:14:38+00:00\",\"dateModified\":\"2024-11-01T11:28:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33219\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33219\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33219\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring Boot Backend Development Course, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain\"}]},{\"@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, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain - \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\/33219\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Hello! In this course, we will learn about backend development using Spring Boot, with a particular focus on implementing login, logout, and signup using Spring Security. This course is aimed at beginners and will cover real application development cases through practical exercises and examples. The course content generally includes the following: Introduction to Spring Boot &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain\"","og_url":"https:\/\/atmokpo.com\/w\/33219\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:14:38+00:00","article_modified_time":"2024-11-01T11:28:24+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\/33219\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33219\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Spring Boot Backend Development Course, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain","datePublished":"2024-11-01T09:14:38+00:00","dateModified":"2024-11-01T11:28:24+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33219\/"},"wordCount":430,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33219\/","url":"https:\/\/atmokpo.com\/w\/33219\/","name":"Spring Boot Backend Development Course, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:14:38+00:00","dateModified":"2024-11-01T11:28:24+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33219\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33219\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33219\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Spring Boot Backend Development Course, Implement Login and Logout with Spring Security, Membership Registration, Creating Member Domain"}]},{"@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\/33219","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=33219"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33219\/revisions"}],"predecessor-version":[{"id":33220,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33219\/revisions\/33220"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}