<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Uyên Nguyễn</title>
    <description>The latest articles on DEV Community by Uyên Nguyễn (@uyen).</description>
    <link>https://dev.to/uyen</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3160468%2F5885ca94-86b2-4bb3-8991-b52d9236d84c.jpg</url>
      <title>DEV Community: Uyên Nguyễn</title>
      <link>https://dev.to/uyen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uyen"/>
    <language>en</language>
    <item>
      <title>Ngôn ngữ Go (Golang): Lịch sử phát triển và những ứng dụng nổi bật trong kỷ nguyên công nghệ hiện nay</title>
      <dc:creator>Uyên Nguyễn</dc:creator>
      <pubDate>Mon, 19 Jan 2026 04:12:08 +0000</pubDate>
      <link>https://dev.to/uyen/ngon-ngu-go-golang-lich-su-phat-trien-va-nhung-ung-dung-noi-bat-trong-ky-nguyen-cong-nghe-hien-a8d</link>
      <guid>https://dev.to/uyen/ngon-ngu-go-golang-lich-su-phat-trien-va-nhung-ung-dung-noi-bat-trong-ky-nguyen-cong-nghe-hien-a8d</guid>
      <description>&lt;h2&gt;
  
  
  1. Hoàn cảnh ra đời của ngôn ngữ Go
&lt;/h2&gt;

&lt;p&gt;Go được phát triển tại Google vào năm 2007 bởi ba kỹ sư nổi tiếng là Robert Griesemer, Rob Pike và Ken Thompson, và chính thức công bố vào năm 2009. Thời điểm đó, Google đang phải duy trì những hệ thống phần mềm rất lớn, với hàng triệu dòng code viết bằng C++, Java và Python. Các ngôn ngữ này tuy mạnh nhưng bộc lộ nhiều hạn chế: C++ phức tạp, thời gian biên dịch dài; Java và Python dễ viết hơn nhưng hiệu năng chưa thực sự tối ưu cho các hệ thống phân tán quy mô lớn.&lt;/p&gt;

&lt;p&gt;Go ra đời nhằm giải quyết bài toán cân bằng giữa hiệu năng cao của ngôn ngữ biên dịch và tính đơn giản, dễ bảo trì của ngôn ngữ bậc cao, đồng thời hỗ trợ tốt cho lập trình song song – yếu tố ngày càng quan trọng trong kỷ nguyên đa lõi và điện toán đám mây.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Các giai đoạn phát triển của Go
&lt;/h2&gt;

&lt;p&gt;Sau giai đoạn thử nghiệm nội bộ, Go được Google công bố chính thức dưới dạng mã nguồn mở vào năm 2009. Sự kiện này đánh dấu bước đầu đưa Go đến với cộng đồng lập trình viên toàn cầu. Năm 2012, phiên bản Go 1.0 ra mắt, mang ý nghĩa quan trọng khi ngôn ngữ đạt được độ ổn định cao và cam kết tương thích ngược, giúp các dự án có thể phát triển lâu dài mà không lo thay đổi lớn về cú pháp. Trong những năm tiếp theo, Go dần được chấp nhận rộng rãi, đặc biệt trong lĩnh vực backend và hệ thống. Từ năm 2020 đến nay, Go tiếp tục được cải tiến mạnh mẽ với nhiều tính năng mới như Go Modules, generics và các tối ưu về hiệu năng, góp phần mở rộng phạm vi ứng dụng của ngôn ngữ này.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Ưu, nhược điểm
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ưu điểm
&lt;/h3&gt;

&lt;p&gt;Một trong những điểm mạnh nổi bật của Go là hiệu năng cao nhờ cơ chế biên dịch trực tiếp sang mã máy, cho tốc độ thực thi gần với C và C++. Bên cạnh đó, Go được thiết kế với cú pháp ngắn gọn, dễ đọc và dễ bảo trì, giúp giảm độ phức tạp trong các dự án lớn. Khả năng xử lý đồng thời của Go cũng được đánh giá rất cao thông qua mô hình goroutine và channel, cho phép lập trình viên xây dựng các chương trình đa luồng một cách trực quan và an toàn. Ngoài ra, Go còn sở hữu thư viện chuẩn phong phú, hỗ trợ tốt cho các tác vụ như lập trình mạng, xây dựng web service và kiểm thử phần mềm.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nhược điểm
&lt;/h3&gt;

&lt;p&gt;Bên cạnh những ưu điểm, Go cũng tồn tại một số hạn chế nhất định. Do theo đuổi triết lý đơn giản và thực dụng, Go cố tình loại bỏ hoặc hạn chế một số tính năng quen thuộc trong các ngôn ngữ hướng đối tượng truyền thống, điều này có thể gây khó chịu cho lập trình viên mới chuyển sang Go. Trong thời gian dài, Go cũng thiếu generics, khiến việc xây dựng các cấu trúc dữ liệu tổng quát gặp khó khăn, dù vấn đề này đã phần nào được cải thiện trong các phiên bản gần đây. Ngoài ra, Go không phải là lựa chọn phổ biến cho phát triển giao diện người dùng, đặc biệt là frontend web.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Các ứng dụng hiện nay của Go
&lt;/h2&gt;

&lt;p&gt;Hiện nay, Go được sử dụng rộng rãi trong phát triển backend và các hệ thống web nhờ khả năng xử lý đồng thời tốt và hiệu năng ổn định. Ngôn ngữ này đặc biệt phù hợp với kiến trúc microservices và các hệ thống phân tán quy mô lớn. Trong lĩnh vực điện toán đám mây và DevOps, Go đóng vai trò rất quan trọng khi nhiều công cụ nổi tiếng như Docker, Kubernetes hay Terraform đều được xây dựng dựa trên Go. Ngoài ra, Go còn được ứng dụng trong phát triển các phần mềm hạ tầng, công cụ mạng và nhiều dự án mã nguồn mở lớn, khẳng định vị thế của mình trong hệ sinh thái công nghệ hiện đại.&lt;/p&gt;

&lt;p&gt;Hiện tại thì mình đang học môn Công nghệ web trên trường, nên trong bài viết mình xin để một link về trang web mình SEO cho môn học: &lt;a href="https://www.newzlearn.id.vn/" rel="noopener noreferrer"&gt;NewZLearn - Nền tảng học trực tuyến linh hoạt và thông minh cho thế hệ trẻ&lt;/a&gt; . Cảm ơn các bạn đã đọc bài viết.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>go</category>
    </item>
    <item>
      <title>Cách Tích Hợp Đăng Nhập Google, GitHub Và Facebook Trong Ứng Dụng Java (Spring Boot)</title>
      <dc:creator>Uyên Nguyễn</dc:creator>
      <pubDate>Wed, 14 May 2025 02:55:49 +0000</pubDate>
      <link>https://dev.to/uyen/cach-tich-hop-dang-nhap-google-github-va-facebook-trong-ung-dung-java-spring-boot-25je</link>
      <guid>https://dev.to/uyen/cach-tich-hop-dang-nhap-google-github-va-facebook-trong-ung-dung-java-spring-boot-25je</guid>
      <description>&lt;p&gt;Việc tích hợp đăng nhập bằng Google, GitHub hoặc Facebook đang trở thành một tiêu chuẩn phổ biến trong các hệ thống web hiện đại sử dụng Java (Spring Boot). Không chỉ mang lại trải nghiệm người dùng mượt mà hơn, hình thức đăng nhập này còn giúp đơn giản hóa việc xác thực và giảm thiểu rủi ro bảo mật liên quan đến mật khẩu. Bài viết dưới đây hướng dẫn cách cấu hình đăng nhập xã hội một cách hiệu quả và dễ hiểu.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I. Tổng quan về OAuth 2.0&lt;/strong&gt;&lt;br&gt;
Tất cả các nền tảng đăng nhập xã hội lớn hiện nay đều sử dụng OAuth 2.0, một giao thức ủy quyền cho phép ứng dụng của bạn truy cập thông tin người dùng từ bên thứ ba (Google, Facebook, GitHub) mà không cần trực tiếp xử lý mật khẩu của họ. Spring Security hỗ trợ tích hợp OAuth 2.0 rất tốt thông qua spring-security-oauth2-client.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;II. Chuẩn Bị Môi Trường&lt;/strong&gt;&lt;br&gt;
Java 17+&lt;br&gt;
Spring Boot 3.x&lt;br&gt;
Spring Security&lt;br&gt;
Maven hoặc Gradle&lt;br&gt;
Thymeleaf (hoặc bất kỳ template engine nào)&lt;br&gt;
IDE như IntelliJ hoặc VS Code Thêm dependency trong pom.xml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-security&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-oauth2-client&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-thymeleaf&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;III. Cấu hình đăng nhập Google&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Đăng ký ứng dụng Google&lt;/strong&gt;&lt;br&gt;
Truy cập: &lt;a href="https://console.cloud.google.com/" rel="noopener noreferrer"&gt;https://console.cloud.google.com/&lt;/a&gt;&lt;br&gt;
Tạo một project mới&lt;br&gt;
Chọn "OAuth consent screen" → chọn "External"&lt;br&gt;
Điền các thông tin cơ bản (tên app, email)&lt;br&gt;
Chọn "Credentials" → Tạo "OAuth 2.0 Client ID"&lt;br&gt;
Ứng dụng: Web application&lt;br&gt;
Authorized redirect URIs: &lt;a href="http://localhost:8080/login/oauth2/code/google" rel="noopener noreferrer"&gt;http://localhost:8080/login/oauth2/code/google&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Cấu hình application.yml&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;security&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;oauth2&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;client&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;registration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;google&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;client-id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;YOUR_CLIENT_ID&lt;/span&gt;
            &lt;span class="na"&gt;client-secret&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;YOUR_CLIENT_SECRET&lt;/span&gt;
            &lt;span class="na"&gt;scope&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;profile, email&lt;/span&gt;
        &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;google&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;authorization-uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://accounts.google.com/o/oauth2/v2/auth&lt;/span&gt;
            &lt;span class="na"&gt;token-uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://oauth2.googleapis.com/token&lt;/span&gt;
            &lt;span class="na"&gt;user-info-uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://www.googleapis.com/oauth2/v3/userinfo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;IV. Cấu hình đăng nhập với GitHub&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Tạo OAuth App trên GitHub&lt;/strong&gt;&lt;br&gt;
Truy cập: &lt;a href="https://github.com/settings/developers" rel="noopener noreferrer"&gt;https://github.com/settings/developers&lt;/a&gt;&lt;br&gt;
New OAuth App:&lt;br&gt;
Homepage: &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;&lt;br&gt;
Authorization callback URL: &lt;a href="http://localhost:8080/login/oauth2/code/github" rel="noopener noreferrer"&gt;http://localhost:8080/login/oauth2/code/github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Thêm vào application.yml:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;security&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;oauth2&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;client&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;registration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;github&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;client-id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;YOUR_CLIENT_ID&lt;/span&gt;
            &lt;span class="na"&gt;client-secret&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;YOUR_CLIENT_SECRET&lt;/span&gt;
            &lt;span class="na"&gt;scope&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read:user,user:email&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;V. Cấu hình đăng nhập với Facebook&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Tạo OAuth App trên GitHub&lt;/strong&gt;&lt;br&gt;
Truy cập: &lt;a href="https://developers.facebook.com" rel="noopener noreferrer"&gt;https://developers.facebook.com&lt;/a&gt;&lt;br&gt;
Tạo App → Chọn Consumer&lt;br&gt;
Thêm sản phẩm "Facebook Login" → Cấu hình:&lt;br&gt;
Valid OAuth Redirect URIs: &lt;a href="http://localhost:8080/login/oauth2/code/facebook" rel="noopener noreferrer"&gt;http://localhost:8080/login/oauth2/code/facebook&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Thêm vào application.yml:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;security&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;oauth2&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;client&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;registration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;facebook&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;client-id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;YOUR_CLIENT_ID&lt;/span&gt;
            &lt;span class="na"&gt;client-secret&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;YOUR_CLIENT_SECRET&lt;/span&gt;
            &lt;span class="na"&gt;scope&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;email, public_profile&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;VI. Cấu hình Security&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Configuration&lt;/span&gt;
&lt;span class="nd"&gt;@EnableWebSecurity&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SecurityConfig&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Bean&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;SecurityFilterChain&lt;/span&gt; &lt;span class="nf"&gt;filterChain&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpSecurity&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;http&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;authorizeHttpRequests&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;requestMatchers&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"/login**"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;permitAll&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;anyRequest&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;authenticated&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
            &lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;oauth2Login&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;defaultSuccessUrl&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/home"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;VII. Hiển thị giao diện&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- templates/index.html --&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;xmlns:th=&lt;/span&gt;&lt;span class="s"&gt;"http://www.thymeleaf.org"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Đăng nhập&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Đăng nhập bằng:&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/oauth2/authorization/google"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Google&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/oauth2/authorization/github"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;GitHub&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/oauth2/authorization/facebook"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Facebook&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;VIII. Hiển thị thông tin người dùng sau khi đăng nhập&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Controller&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HomeController&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/home"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;home&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Model&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;OAuth2AuthenticationToken&lt;/span&gt; &lt;span class="n"&gt;authentication&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;OAuth2User&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;authentication&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getPrincipal&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addAttribute&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAttribute&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addAttribute&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAttribute&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"home"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- templates/home.html --&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;xmlns:th=&lt;/span&gt;&lt;span class="s"&gt;"http://www.thymeleaf.org"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;&lt;/span&gt;Trang chủ&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Xin chào, &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;th:text=&lt;/span&gt;&lt;span class="s"&gt;"${name}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;!&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Email: &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;th:text=&lt;/span&gt;&lt;span class="s"&gt;"${email}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hiện tại thì mình đang học môn SEO trên trường, nên trong bài viết mình xin để một link về trang web mình SEO cho môn học: &lt;a href="https://cynhub.id.vn" rel="noopener noreferrer"&gt;https://cynhub.id.vn&lt;/a&gt; . Cảm ơn các bạn đã đọc bài viết.&lt;/p&gt;

</description>
      <category>java</category>
      <category>oauth</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
