Cách Tạo Form Đăng Nhập Trong Excel (User Login Form)

--- Bài mới hơn ---

  • Hướng Dẫn Tạo Nhiều Tài Khoản Facebook Bằng Số Điện Thoại Mỹ Nhanh Chóng
  • 2 Cách Đổi Tên Facebook Kí Tự Đặc Biệt Trên Điện Thoại Đơn Giản
  • Icon Dấu Tích Xanh – Kí Tự Tích Xanh – Coppy Dấu Tích Xanh – Ký Tự Dấu Tích Xanh Facebook – Button Tích Xanh Facebook
  • Cách Tạo Dấu Tích Xanh Trên Facebook Cá Nhân 2022 – 2022
  • Tạo Usb Boot Uefi + Legacy Và Cài Windows 10 20H2 Chuẩn Uefi
  • Rate this post

    Hướng dẫn cách tạo form đăng nhập trong excel (User login form)

    ———-

    XEM THÊM:

    1. Top 50 thủ thuật Excel:

    2. Pivot Table trong Excel:

    3. Các hàm Excel quan trọng nhất:

    4. Tạo báo cáo động trong Excel (Dashboard):

    5. VBA Excel cấp tốc FULL:

    6. Bí mật hàm Vlookup trong Excel:

    7. Toàn bộ các hàm Excel thông dụng:

    8. Hướng dẫn giải 101 bài thực hành Excel:

    9. Excel nâng cao với công thức mảng:

    10. Excel cho Kế toán cơ bản đến nâng cao:

    11. Custom Formatting – Định dạng số trong Excel:

    12. Hướng dẫn vẽ biều đồ:

    13. Excel cơ bản cấp tốc:

    14. Hàm điều kiện IF từ cơ bản đến nâng cao:

    15. Định dạng có điều kiện – Conditional Formatting:

    16. Các lỗi thường gặp và cách khắc phục:

    17. Top 25 thủ thuật nâng cao:

    18. Ứng dụng VBA Excel:

    19. Tạo Form nhập dữ liệu tự động:

    20. Form quản lý khách hàng:

    21. Học google sheet Full:

    22. Hệ thống quản lý kho – hàng hóa và mua bán:

    23. 5 cách copy dữ liệu Excel sang Word:

    24. Quản lý công việc bằng Excel:

    25. Cách tạo thẻ ID tự động:

    —————–

    Link tải file thực hành:

    Đăng ký Để nhận video mới:

    Facebook hỗ trợ:

    Fanpage Gà Excel:

    —————–

    #Gaexcel “Gà_excel #ExcelChicken #CungHocExcel #ExcelCoBan #ExcelNangCao

    Tag: tạo form đăng ký, cách tạo form đăng nhập, cách tạo form đăng nhập trong excel, form đăng nhập, đăng nhập excel, user login form, tạo form đăng nhập, form đăng nhập trong excel, tạo form đăng nhập excel, code tạo form đăng nhập excel, bảo vệ file excel, đặt pass cho file excel, khóa file excel bằng mật khẩu, mật khẩu file excel, mật khẩu excel, cách đặt mật khẩu file excel, vba excel, vba, excel, userform, userform trong excel, form login, quản lý user, ga.excel, gà excel, gaexcel, huong dan

    Xem Thêm Bài Viết Chia Sẻ Khác: https://diễnđàn.vn/chia-se

    Nguồn: https://diễnđàn.vn

    --- Bài cũ hơn ---

  • Ghost Win Xp Bằng Usb Nhanh Chóng Không Cần Dùng Đĩa
  • Hướng Dẫn Cấu Hình Outlook Để Gửi Và Nhận Email
  • Hướng Dẫn Cài Đặt Email Trong Outlook Express Và Microsoft Outlook
  • Cách Chọn Kiểu Chân Mày Xăm Phù Hợp Với Dáng Khuôn Mặt 2022
  • Dáng Lông Mày Cho Mặt Tròn Phù Hợp Với Bạn? Tiêu Chí Đánh Giá?
  • Tạo Form Login Đơn Giản Với Java (Phần 1)

    --- Bài mới hơn ---

  • Phần Mềm Tạo Ổ Đĩa Ảo Nào Tốt: Ultraiso, Daemon, Clonedrive
  • Cách Tạo, Cài Nhạc Chuông Cho Iphone Bằng Itunes Và Không Cần Itunes
  • Tìm Hiểu Về File I/o Trong Java
  • Robots.txt Là Gì? Hướng Dẫn Tạo Filecho Website
  • Hướng Dẫn Tạo Filecho WordPress 2022
  • 1. JFrame (dạng kéo-thả) trong NetBeans và Java là gì?

    Container là thành phần chủ chốt trong các thành phần của Swing GUI. Một Container cung cấp không gian để đặt một thành phần. Một Container trong AWT chính là một Component và nó có thêm khả năng để thêm các thành phần khác vào chính nó.

    Khi xem xét về Container, bạn cần chú ý các điểm sau:

    • Các lớp con của Container được gọi là Container. Một số ví dụ về các lớp con của Container là JPanel, JFrame và JWindow.
    • Container chỉ có thể thêm Component vào chính nó.
    • Một layout mặc định có mặt trong mỗi container. Layout này có thể bị ghi đè bởi sử dụng phương thức setLayout().

    Chương này chúng ta sẽ tìm hiểu về JFrame. Lớp JFrame là một phiên bản kế thừa từ java.awt.Frame mà bổ sung các hỗ trợ cho cấu trúc thành phần JFC/Swing.

    Cú pháp khai báo cho lớpjavax.swing.JFramelà:

    Lớp này kế thừa các phương thức từ các lớp sau:

    • java.awt.Frame
    • java.awt.Window
    • java.awt.Container
    • java.awt.Component
    • java.lang.Object

    Lớp JFrame này có các constructor sau:

    1. JFrame(): Xây dựng một Frame mới, ban đầu là không nhìn thấy (invisible).

    2. JFrame(GraphicsConfiguration gc): Tạo một Frame trong GraphicsConfiguration đã cho của một thiết bị màn hình và một title trống.

    3. JFrame(String title): Tạo một Frame mới, ban đầu là không nhìn thấy (invisible) với title đã cho.

    4. JFrame(String title, GraphicsConfiguration gc): Tạo một Frame với title đã cho và GraphicsConfiguration đã cho của một thiết bị màn hình.

    Lưu ý: Nếu bạn muốn bắt đầu học và tìm hiểu về Java Swing, các bạn nên đọc các bài viết trên Internet hướng dẫn về cách bố trí GUI sao cho hợp lý, không nên bắt đầu từ việc kéo thả.

    2. Tạo Form login cơ bản trong Java

    Bước 0: Mở NetBeans của bạn lên (việc này đơn giản, mình sẽ không nói nhiều)

    Bước 1: Tạo một Project mới:

    Các bạn bấm vào nút New Project trên IDE của mình

    Sau đó sẽ có một cửa sổ hiện ra:

    Các bạn sẽ bấm Next theo cấu hình này.

    Ở bước tiếp theo, các bạn sẽ có một màn hình nhìn như thế này:

    Vì nếu tích, IDE sẽ tự tạo ra hàm main cho ứng dụng, nhưng ở đây chúng ta muốn dùng JFrame form.

    Sau khi xong, các bạn bấm Finish.

    Bước 2: Tạo file JFrame cho ứng dụng.

    Các bạn thực hiện như video này:

    Sau đó các bạn có thể kéo thả các Element vào như sau:

    Tạm kết

    --- Bài cũ hơn ---

  • Sub Facebook Là Gì? Các Cách Tăng Sub Facebook Lượt Theo Dõi Nhanh Nhất
  • Cách Đặt Tạo Mật Khẩu Password Cho Thư Mục Folder Windows 7
  • Cách Cài Đặt Mật Khẩu Cho Folder Giúp Bảo Mật Cho Thư Mục
  • Cách Tạo Thư Mục Ứng Dụng Trên Android
  • Cách Tạo Thư Mục Android ? Hướng Dẫn Đầy Đủ
  • Tạo Form Login Trên Môi Trường Phân Tán Bằng C#

    --- Bài mới hơn ---

  • Tạo File Iso Bằng Winrar, Poweriso Trên Win 7, Win 10
  • Hướng Dẫn Backup/ Sao Lưu Dữ Liệu Iphone Ra Máy Tính Dễ Dàng
  • Cách Sao Lưu Và Phục Hồi Dữ Liệu Iphone, Ipad
  • Cách Sao Lưu Icloud, Backup Dữ Liệu Icloud Trên Iphone, Ipad
  • Cách Tạo File Excel Trên Ios, Iphone, Ipad
  • Giả sử có 1 db QL_VATTU nằm ở sv gốc.

    Tên sv gốc : MUASAOBANG

    SV phân tán 1 : MUASAOBANGSERVER1 – chứa thông tin vật tư thuộc “CN1”

    SV phân tán 2 : MUASAOBANGSERVER2 – chưa thông tin vật tư thuộc “CN2”

    1. Tạo link server

    2. Tạo login name và roles

    3. Tạo Form đăng nhập

    Lưu ý : Mưa chỉ hướng dẫn bước 3, các bạn phải làm được 2 bước trên mới làm bước 3! 1. Tạo một project mới có tên loginProject và thiết kế giao diện như hình :

    Code:
    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

    namespace loginProject

    {

    class luutru

    {

    private static string username;

    public static string Username

    {

    get { return luutru.username; }

    set { luutru.username = value; }

    }

    private static string password;

    public static string Password

    {

    get { return luutru.password; }

    set { luutru.password = value; }

    }

    private static string server;

    public static string Server

    {

    get { return luutru.server; }

    set { luutru.server = value; }

    }

    private static string chinhanh;

    public static string Chinhanh

    {

    get { return luutru.chinhanh; }

    set { luutru.chinhanh = value; }

    }

    }

    }

    Code:
    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

    using System.Windows.Forms;

    using System.Data.SqlClient;

    namespace loginProject

    {

    class ktLogin

    {

    public static bool kiemtra(String sv, String usr, String pass, String chinhanh)

    {

    SqlConnection con;

    bool kt = false;

    String sql = @"Server=" sv ";Database=QL_VATTU;User Id=" usr ";Password=" chinhanh";";

    try

    {

    con = new SqlConnection(sql);

    con.Open();

    con.Close();

    // luu cac bien server, chinh nhanh, user va pass lai de~ co' dung` thi dung`

    luutru.Server = sv;

    luutru.Username = usr;

    luutru.Password = pass;

    luutru.Chinhanh = chinhanh;

    kt = true;

    }

    catch (Exception)

    {

    MessageBox.Show("Username or Password is incorrect !", "Error", chúng tôi MessageBoxIcon.Error);

    }

    return kt;

    }

    }

    }

    4.Nội dung code trong Form:

    Ở cmbChiNhanh các bạn không nên đánh trực tiếp tên Chi nhánh 1, Chi nhánh 2 vào Colection.Vì trường hợp bạn thêm 1 chi nhánh trong DB thì bạn sẽ lại phải gõ trong Colection.

    Mưa khuyến cáo bạn nên load dữ liệu tên Chi nhánh từ DB, như vậy sẽ tối ưu hơn và đỡ tốn thời gian.

    Cuối cùng , nếu bạn làm chưa được, có thể down project của Mưa về tham khảo.

    --- Bài cũ hơn ---

  • Cách Tạo Một Câu Hỏi Truy Vấn (Query) Căn Bản Trong Access 2022
  • Cách Vào Thư Mục Trong Iphone Can Thiệt Vào File
  • 【Share 】Bản Ghost Win 10 64Bit/32Bit Uefi Đã Cài Full Soft
  • Tải Ghost Win 10 64Bit Full Soft Uefi Mới 2022
  • Hướng Dẫn Cách Bung Ghost Trên Máy Ảo Virtualbox
  • Từng Bước Tạo Trang Đăng Nhập (Login Page) Bằng Php

    --- Bài mới hơn ---

  • Lập Trình Windows Form Cơ Bản Cần Những Gì?
  • Hướng Dẫn Tải, Cài Đặt Và Sử Dụng Visual Studio 2022
  • Thiết Kế Giao Diện Winform Tuyệt Đẹp Nhanh Chóng Với Devexpress.
  • Cách Tự Tạo Khung Hình Hiệu Ứng Trên Facebook
  • Học Revit:2.4.2) Tạo File Central Trên Mạng Nội Bộ
  • Bước 1 : Tạo database và table

    Trong ví dụ này chúng ta sẽ đặt tên database là ” test “ và tạo một table là “members”. Nếu bạn nào chưa biết cách tạo database và table thì có thể tham khảo bài viết Tạo database, table và quản lý cơ sở dữ liệu MySQL bằng phpMyAdmin

    CREATE TABLE `members` (

    `id` int(4) NOT NULL auto_increment,

    `username` varchar(65) NOT NULL default ”,

    `password` varchar(65) NOT NULL default ”,

    PRIMARY KEY (`id`)

    ) TYPE=MyISAM AUTO_INCREMENT=2 ;

    — Dumping data for table `members`

    INSERT INTO `members` VALUES (1, ‘john’, ‘1234’);

    Bước 2 : Tạo file ” main_login.php “

    Các bạn dán (paste) đoạn code sau vào file này:

    Bước 3 : Tạo file ” chúng tôi “

    File này được dùng để kiểm tra xem người dùng sau khi nhập username và password xong có đúng hay không, và nó cũng kiểm tra xem user đó đã tồn tại hay chưa, nếu người dùng nhập đúng tài khoản của họ thì nó sẽ tự động chuyển sang trang thông báo ” login_success.php” và ngược lại nó sẽ thông báo lỗi đăng nhập

    Các bạn dán đoạn code sau vào file chúng tôi :

    <?php $host="localhost"; // luôn luôn là localhost $username="root"; // user của mysql $password=""; // Mysql password $db_name="test"; // tên database $tbl_name="members"; // tên table // kết nối cơ sở dữ liệu mysql_connect("$host", "$username", "$password")or die("Không thể kết nối"); mysql_select_db("$db_name")or die("cannot select DB"); // username và password được gửi từ form đăng nhập $myusername=$_POST; // Xử lý để tránh MySQL injection $myusername = stripslashes($myusername); $mypassword = stripslashes($mypassword); $myusername = mysql_real_escape_string($myusername); $mypassword = mysql_real_escape_string($mypassword); $sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; $result=mysql_query($sql); $count=mysql_num_rows($result); // nếu tài khoản trùng khớp thì sẽ trả về giá trị 1 cho biến $count if($count==1){ // Lúc này nó sẽ tự động gửi đến trang thông báo đăng nhập thành công session_register("myusername"); session_register("mypassword"); header("location:login_success.php"); } else { echo "Sai tên đăng nhập hoặc mật khẩu"; }

    Bước 4 : Tạo file ” login_success.php “

    Như mình đã nói ở bước 3 , file này sẽ xuất hiện dòng thông báo đăng nhập thành công.

    Các bạn dán đoạn code sau :

    <?php session_start(); if(!session_is_registered(myusername)){ header("location:main_login.php"); } Đăng nhập thành công !

    Bước 5 : Tạo file ” chúng tôi “

    File này được dùng để thoát tài khoản , các bạn dán đoạn code sau, đoạn code này sẽ xóa bỏ hết các session

    <?php session_start(); session_destroy();

    --- Bài cũ hơn ---

  • Khóa Học Visual Foxpro 9 Dành Cho Dân Quản Lý, Kế Toán, Ngân Hàng Và Tài Chính
  • Tạo File Ghost Đa Cấu Hình Tự Động Nhận Driver
  • Cách Ghost Không Cần Đĩa Win Xp, 7, 8, 10 Hiệu Quả
  • Các Phím Tắt Hay Sử Dụng Nhất Trong Windows
  • Hướng Dẫn Cách Tạo Shortcut Trên Win 10
  • Xây Dựng Api Login Sử Dụng Các Dịch Vụ Mạng Xã Hội: Facebook, Twitter, Google

    --- Bài mới hơn ---

  • Hướng Dẫn Tạo Thêm Tài Khoản Facebook Hàng Loạt Cùng Lúc
  • Các Cách Tạo Nick Facebook Không Bị Checkpoint & Share Nick Facebook 2022 Mới
  • Cách Tạo Ảnh Bìa Facebook Bán Hàng Online Đẹp Miễn Phí Đơn Giản Nhất
  • Tự Tạo Ảnh Bìa Facebook
  • Ahachat Chatbot Là Gì? Cách Tạo Bot Facebook Tại Ahachat?
  • Authentication: Đây là kịch bản phổ biến nhất cho việc sử dụng JWT. Một khi người dùng đã đăng nhập vào hệ thống thì những request tiếp theo từ phía người dùng sẽ chứa thêm mã JWT, cho phép người dùng quyền truy cập vào các đường dẫn, dịch vụ, và tài nguyên mà cần phải có sự cho phép nếu có mã Token đó. Phương pháp này không bị ảnh hưởng bởi Cross-Origin Resource Sharing (CORS) do nó không sử dụng cookie.

    Link) để giải thích một chút về kịch bản vừa quote ở trên . Tạm giải thích như sau: Browser chính là Client, khi Client gửi request đăng nhập lên server có chứa username/email và password thì server sẽ tạo ra một jwt và trả về cho Client. Kể từ đó khi Client muốn truy cập vào tài nguyên nào cần phải xác thực thì trong request đó cần đính kèm header Authorization chính là cái token đã được trả về từ trước đó. Server nhận request check xem token hợp lệ thì thực hiện yêu cầu của request và trả lại kết quả cho Client. Vâng ở trên chính là flow authen dành cho trường hợp truyền thống sử dụng username/email + password để đăng nhập. Bây giờ ta cần chỉnh sửa một chút để áp dụng với đăng nhập bên thứ 3. Có thể mường tượng nó như thế này: Đầu tiên ta cần authen với bên thứ 3 (Facebook, Twitter, Google) bằng tài khoản của dịch vụ đó và lấy đc access_token. Gửi access_token đó lên server, server gửi request lấy thông tin user dùng access_token của bên thứ 3 đó. Trong thông tin mà API bên thứ 3 trả về sẽ chứa userIdSocial, từ userIdSocial này ta check xem đã có trong hệ thống của mình chưa nếu userIdSocial chưa có thì mình sẽ tạo 1 user mới lấy những thông tin từ bên thứ 3 về để điền vào ví dụ như là name, email, …. sau khi tạo user thì server cũng tạo luôn jwt và trả về cho client, còn nếu userIdSocial đã có trong hệ thống thì mình chỉ cần tạo ra jwt và trả về cho client, flow tiếp theo tương tự như với trường hợp bên trên. Như vậy chỉ cần lấy đc access_token thì ta có thể đăng nhập vào hệ thống mà không cần password rồi. Đã hiểu được cơ chế của nó thì mình bắt tay vào code thôi.. (go)

    Đầu tiên để xây dựng được API login bằng mạng xã hội ta cần trải qua một bước tạm gọi là “phân tích thiết kế”. Việc cần làm là vẽ ra cái Database đã. Ta có một bảng users chứa các thông tin về người dùng: email, password, name. Mỗi user có thể liên kết với nhiều mạng xã hội khác nhau vì vậy ta sẽ thiết kế thêm 1 bảng nữa tạm gọi là social_networks có quan hệ 1 nhiều với bảng users và có chứa các trường user_id, type, social_id. Migration như sau:

    API login với Facebook

    Đầu tiên ta tải thư viện graph của facebook

    composer require facebook/graph-sdk

    Giờ việc còn lại chỉ cần tạo route trỏ tới hàm trên nữa là done.

    API login với Twitter

    Với Twitter ta sẽ sử dụng thư viện abraham/twitteroauth để fetch thông tin user từ Twitter Code tương tự như với facebook, chỉ có khác là với twitter ta sẽ nhận tới 2 tham số token làaccess_tokenaccess_token_secret

    Thêm route:

    API login với Google

    Với google thì ta sẽ sử dụng google/apiclient để verify token và fetch thông tin user. Và client sẽ gửi lên id_token khi client thực hiện đăng nhập với Google Sign-In.

    Thêm route:

    All Rights Reserved

    --- Bài cũ hơn ---

  • Hướng Dẫn Cách Tạo Api Đăng Nhập Bằng Facebook
  • Cách Tạo Via Facebook Ads Là Gì? Hướng Dẫn Tạo Bm Via Facebook
  • Cách Soạn Và Gửi Email Cho Người Khác Với Gmail Trong 1 Phút
  • Bật Mí Cách Tạo Mật Khẩu Khóa Màn Hình Iphone 6
  • Hướng Dẫn Đăng Ký, Tạo Lập Tài Khoản Apple Id Nhanh Chóng
  • Những Cách Fake Ip Làm Offer

    --- Bài mới hơn ---

  • Cách Làm Cơm Cuộn Omurice Nhật Bản Siêu Hấp Dẫn
  • Cách Làm Cơm Chiên Trứng Omurice Nhật Bản Ngon Khó Cưỡng
  • Hướng Dẫn Cách Làm Quạt Hơi Nước Tại Nhà Đơn Giản Nhất
  • 5 Tin Nhắn Đầu Tiên Khi Làm Quen Mà Bạn Cần Phải Biết
  • Cách Làm Quotes Trên Điện Thoại
  • Những trang web kiếm tiền Offer, Paid To Sign Up, GPT site hiện nay đa số là những trang của United States, họ chỉ chấp nhận thành viên đăng kí từ United States hoặc một số các nước khác, không cho phép đăng kí từ Việt Nam. Tuy nhiên có nhiều cách giúp bạn vẫn có thể kiếm tiền từ Offer, Gpt site, Paid to sign up mà không bị họ phát hiện, đó là sử dụng Sock, hoặc VPN. Cơ bản Sock và VPN đều là công cụ dùng để thay đổi địa chỉ IP thật (địa chỉ IP Việt Nam) bằng địa chỉ IP ảo (địa chỉ IP mới có server đặt ở United States, United Kingdom, Canada…), để sử dụng sock hay VPN đều phải đầu tư một số tiền và có những ưu nhược điểm riêng.

    So sánh ưu nhược điểm của sock và VPN:

    1. Sock:

    • Ưu điểm: – Làm việc khá tốt
    • Nhược điểm: – Thời gian live rất ngắn, chỉ 1 vài ngày là die, tốc độ lướt web rất chậm, giá cao.

    Tạo Một Ứng Dụng Login Đơn Giản Và Bảo Mật Với Java Servlet Filter

    --- Bài mới hơn ---

  • Hướng Dẫn Chỉnh Sửa Rom Android Theo Ý Của Bạn
  • Daemon Tools Pro 8.3.0.0749 Full Crack
  • Cách Backup Mail Trong Microsoft Outlook
  • Làm Thế Nào Để Backup Mail Outlook/thunderbird/mac Mail
  • Hướng Dẫn Đăng Nhập Viber Trên Máy Tính & Điện Thoại 2022
  • Bảo mật (Security) là môt khía cạnh quan trọng của một ứng dụng có sự vận chuyển các dữ liệu quan trọng trên Internet.

    Authentication (Xác thực)

    Xác thực là quá trình mà quyền truy cập (access privileges) của người dùng được xác minh trước khi họ vào khu vực được bảo vệ của Website. Có hai cách tiếp cận xác thực chính: xác thực cơ bản và xác thực dựa trên biểu mẫu (Form-based authentication).

    Basic Authentication (Xác thực cơ bản).

    Với xác thực cơ bản, người dùng có thể truy cập mọi trang (page) hoàn toàn bình thường, với các trang yêu cầu bảo mật, một cửa sổ sẽ hiển thị để người dùng nhập vào username/password của họ. Thông tin username/password sẽ được gói lại gửi kèm theo yêu cầu (request) đến Server.

    Khi người dùng nhập một đường dẫn trên trình duyệt, và nhấn Enter để yêu cầu một trang (page). Một thông tin “User Agent” được tạo ra và được gửi kèm theo yêu cầu. Thông thường thông tin này bao gồm thông tin trình duyệt của người dùng, thông tin hệ điều hành. Trong trường hợp xác thực cơ bản (basic authentication) thông tin username/password được gói bên trong “User Agent”.

    Trong bài học này tôi không đề cập chi tiết về xác thực cơ bản.

    Form-based Authentication (Xác thực dựa trên biểu mẫu)

    Hầu hết các Website sử dụng hình thức xác thực dựa trên biểu mẫu (Form-based Authentication). Website cho phép người dùng truy cập mọi trang thông thường mà không yêu cầu mật khẩu. Tuy nhiên nếu người dùng truy cập vào một trang được bảo vệ, nó sẽ chuyển hướng tới một trang đăng nhập.

    Trong bài học này, tôi sẽ đề cập chi tiết về cách sử dụng một Servlet Filter để bảo mật ứng dụng Java Web.

    2- Khái niệm về Role và Principal

    Trong bảo mật, có 2 khái niệm quan trọng là Principal Role.

    Role (Vai trò) là một tập hợp các quyền (permission) đối với một ứng dụng.

    Để đơn giản tôi đưa ra một ví dụ, ứng dụng ABC có 2 vai trò “EMPLOYEE” (nhân viên) và “MANAGER” (Người quản lý).

    • Vai trò “EMPLOYEE” được phép sử dụng các chức năng bán hàng, và chức năng tạo mới thông tin khách hàng.
    • Vai trò “MANAGER” được phép sử dụng các chức năng quản lý nhân viên, và xem các báo cáo doanh thu.

    Principal có thể tạm hiểu là một “Chủ thể” sau khi đã đăng nhập vào một hệ thống, họ có quyền làm điều gì đó trong hệ thống. Một “Chủ thể” có thể có một hoặc nhiều vai trò. Điều này phụ thuộc vào sự phân quyền của ứng dụng cho mỗi tài khoản người dùng khác nhau.

    Trong ứng dụng Java Servlet, một Servlet Filter đặc biệt được sử dụng để xử lý bảo mật, nó thường được gọi là Security Filter.

    Khi người dùng truy cập vào một trang (page) được bảo vệ, Security Filter sẽ kiểm tra, nếu người dùng chưa đăng nhập, yêu cầu của người dùng sẽ bị chuyển hướng (redirect) sang trang đăng nhập.

    Nếu người dùng đã đăng nhập thành công, một đối tượng Principal được tạo ra, nó mang các thông tin của người dùng, bao gồm cả các vai trò.

    Nếu người dùng đã đăng nhập thành công trước đó, và truy cập vào một trang (page) được bảo vệ. Security Filter sẽ kiểm tra các vai trò của người dùng có phù hợp để truy cập vào trang này hay không. Nếu không hợp lệ, nó sẽ hiển thị cho người dùng một trang thông báo truy cập bị cấm (Access Denied).

    Đây là cấu trúc của ứng dụng mà chúng ta sẽ thực hiện:

    Ứng dụng bao gồm 2 vai trò (Role) là EMPLOYEE MANAGER.

    1. Vai trò EMPLOYEE cho phép truy cập 2 trang /userInfo/employeeTask
    2. Vai trò MANAGER cho phép truy cập 2 trang /userInfo/managerTask.

    Tất cả các trang khác trong ứng dụng không yêu cầu phải đăng nhập.

    Có 2 người dùng (user) là employee1manager1.

    • Người dùng employee1 được gán vai trò EMPLOYEE
    • Người dùng manager1 được gán cả 2 vai trò MANAGER EMPLOYEE.

    Người dùng có thể truy cập tất cả các trang không được bảo hộ một cách bình thường. Tuy nhiên nếu người dùng truy cập vào một trang ABC được bảo hộ, nó sẽ chuyển hướng (redirect) tới trang đăng nhập. Người dùng đăng nhập thành công, lúc này sẽ có 2 tình huống xẩy ra:

    • Ứng dụng sẽ chuyển hướng về trang ABC sau khi đăng nhập thành công, nếu userName có vai trò phù hợp.
    • Ứng dụng sẽ hiển thị thông báo truy cập bị từ chối (Access Denied) nếu userName có vai trò không phù hợp.

    Lớp UserAccount đại diện cho người dùng của ứng dụng.

    package org.o7planning.securitywebapp.bean; import java.util.ArrayList; import java.util.List; public class UserAccount { public static final String GENDER_MALE = "M"; public static final String GENDER_FEMALE = "F"; private String userName; private String gender; private String password; public UserAccount() { } public UserAccount(String userName, String password, String gender, String... roles) { this.userName = userName; this.password = password; this.gender = gender; if (roles != null) { for (String r : roles) { this.roles.add(r); } } } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } return roles; } this.roles = roles; } }

    Lớp DataDAO được sử dụng để truy vấn dữ liệu trong Database (Mô phỏng).

    package org.o7planning.securitywebapp.utils; import java.util.HashMap; import java.util.Map; import org.o7planning.securitywebapp.bean.UserAccount; import org.o7planning.securitywebapp.config.SecurityConfig; public class DataDAO { static { initUsers(); } private static void initUsers() { // User này có 1 vai trò là EMPLOYEE. UserAccount emp = new UserAccount("employee1", "123", UserAccount.GENDER_MALE, // SecurityConfig.ROLE_EMPLOYEE); // User này có 2 vai trò EMPLOYEE và MANAGER. UserAccount mng = new UserAccount("manager1", "123", UserAccount.GENDER_MALE, // SecurityConfig.ROLE_EMPLOYEE, SecurityConfig.ROLE_MANAGER); mapUsers.put(emp.getUserName(), emp); mapUsers.put(mng.getUserName(), mng); } // Tìm kiếm người dùng theo userName và password. public static UserAccount findUser(String userName, String password) { UserAccount u = mapUsers.get(userName); if (u != null && u.getPassword().equals(password)) { return u; } return null; } }

    7- SecurityConfig & SecurityUtils

    Lớp SecurityConfig giúp cấu hình các vai trò và các chức năng (các trang) được phép truy cập ứng với vai trò đó.

    package org.o7planning.securitywebapp.config; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; public class SecurityConfig { public static final String ROLE_MANAGER = "MANAGER"; public static final String ROLE_EMPLOYEE = "EMPLOYEE"; // String: Role static { init(); } private static void init() { // Cấu hình cho vai trò "EMPLOYEE". urlPatterns1.add("/userInfo"); urlPatterns1.add("/employeeTask"); mapConfig.put(ROLE_EMPLOYEE, urlPatterns1); // Cấu hình cho vai trò "MANAGER". urlPatterns2.add("/userInfo"); urlPatterns2.add("/managerTask"); mapConfig.put(ROLE_MANAGER, urlPatterns2); } return mapConfig.keySet(); } return mapConfig.get(role); } }

    Lớp SecurityUtils là một lớp tiện ích, nó có các phương thức giúp kiểm tra một request (yêu cầu) có bắt buộc phải đăng nhập hay không, và request đó có phù hợp với vai trò của người dùng đã đăng nhập hay không.

    package org.o7planning.securitywebapp.utils; import java.util.List; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.o7planning.securitywebapp.config.SecurityConfig; public class SecurityUtils { // Kiểm tra 'request' này có bắt buộc phải đăng nhập hay không. public static boolean isSecurityPage(HttpServletRequest request) { String urlPattern = UrlPatternUtils.getUrlPattern(request); for (String role : roles) { if (urlPatterns != null && urlPatterns.contains(urlPattern)) { return true; } } return false; } // Kiểm tra 'request' này có vai trò phù hợp hay không? public static boolean hasPermission(HttpServletRequest request) { String urlPattern = UrlPatternUtils.getUrlPattern(request); for (String role : allRoles) { if (!request.isUserInRole(role)) { continue; } if (urlPatterns != null && urlPatterns.contains(urlPattern)) { return true; } } return false; } }

    package org.o7planning.securitywebapp.utils; import java.util.Collection; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.ServletRegistration; import javax.servlet.http.HttpServletRequest; public class UrlPatternUtils { private static boolean hasUrlPattern(ServletContext servletContext, String urlPattern) { for (String servletName : map.keySet()) { ServletRegistration sr = map.get(servletName); if (mappings.contains(urlPattern)) { return true; } } return false; } // servletPath: public static String getUrlPattern(HttpServletRequest request) { ServletContext servletContext = request.getServletContext(); String servletPath = request.getServletPath(); String pathInfo = request.getPathInfo(); String urlPattern = null; if (pathInfo != null) { urlPattern = servletPath + "/*"; return urlPattern; } urlPattern = servletPath; boolean has = hasUrlPattern(servletContext, urlPattern); if (has) { return urlPattern; } int i = servletPath.lastIndexOf('.'); if (i != -1) { String ext = servletPath.substring(i + 1); urlPattern = "*." + ext; has = hasUrlPattern(servletContext, urlPattern); if (has) { return urlPattern; } } return "/"; } }

    SecurityFilter là một Servlet Filter, nó làm nhiệm vụ kiểm tra các request trước khi cho phép truy cập vào các trang (page) được bảo hộ.

    SecurityFilter đọc “các cấu hình bảo mật” đã được khai báo trong lớp SecurityConfig.

    package org.o7planning.securitywebapp.filter; import java.io.IOException; import java.util.List; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.o7planning.securitywebapp.bean.UserAccount; import org.o7planning.securitywebapp.request.UserRoleRequestWrapper; import org.o7planning.securitywebapp.utils.AppUtils; import org.o7planning.securitywebapp.utils.SecurityUtils; @WebFilter("/*") public class SecurityFilter implements Filter { public SecurityFilter() { } @Override public void destroy() { } @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; String servletPath = request.getServletPath(); // Thông tin người dùng đã được lưu trong Session // (Sau khi đăng nhập thành công). UserAccount loginedUser = AppUtils.getLoginedUser(request.getSession()); if (servletPath.equals("/login")) { chain.doFilter(request, response); return; } HttpServletRequest wrapRequest = request; if (loginedUser != null) { // User Name String userName = loginedUser.getUserName(); // Các vai trò (Role). // Gói request cũ bởi một Request mới với các thông tin userName và Roles. wrapRequest = new UserRoleRequestWrapper(userName, roles, request); } // Các trang bắt buộc phải đăng nhập. if (SecurityUtils.isSecurityPage(request)) { // Nếu người dùng chưa đăng nhập, // Redirect (chuyển hướng) tới trang đăng nhập. if (loginedUser == null) { String requestUri = request.getRequestURI(); // Lưu trữ trang hiện tại để redirect đến sau khi đăng nhập thành công. int redirectId = AppUtils.storeRedirectAfterLoginUrl(request.getSession(), requestUri); response.sendRedirect(wrapRequest.getContextPath() + "/login?redirectId=" + redirectId); return; } // Kiểm tra người dùng có vai trò hợp lệ hay không? boolean hasPermission = SecurityUtils.hasPermission(wrapRequest); if (!hasPermission) { RequestDispatcher dispatcher // = request.getServletContext().getRequestDispatcher("/WEB-INF/views/accessDeniedView.jsp"); dispatcher.forward(request, response); return; } } chain.doFilter(wrapRequest, response); } @Override public void init(FilterConfig fConfig) throws ServletException { } }

    UserRoleRequestWrapper.java

    package org.o7planning.securitywebapp.request; import java.security.Principal; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; /** * An extension for the HTTPServletRequest that overrides the getUserPrincipal() * and isUserInRole(). We supply these implementations here, where they are not * normally populated unless we are going through the facility provided by the * container. * If he user or roles are null on this wrapper, the parent request is consulted * to try to fetch what ever the container has set for us. This is intended to * be created and used by the UserRoleFilter. * * @author thein * */ public class UserRoleRequestWrapper extends HttpServletRequestWrapper { private String user; private HttpServletRequest realRequest; super(request); this.user = user; this.roles = roles; this.realRequest = request; } @Override public boolean isUserInRole(String role) { if (roles == null) { return this.realRequest.isUserInRole(role); } return roles.contains(role); } @Override public Principal getUserPrincipal() { if (this.user == null) { return realRequest.getUserPrincipal(); } // Make an anonymous implementation to just return our user return new Principal() { @Override public String getName() { return user; } }; } }

    9- Trang chủ, Login, Logout

    package org.o7planning.securitywebapp.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet({ "/", "/index" }) public class HomeServlet extends HttpServlet { private static final long serialVersionUID = 1L; public HomeServlet() { super(); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher dispatcher // = this.getServletContext().getRequestDispatcher("/WEB-INF/views/homeView.jsp"); dispatcher.forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

    package org.o7planning.securitywebapp.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.o7planning.securitywebapp.bean.UserAccount; import org.o7planning.securitywebapp.utils.AppUtils; import org.o7planning.securitywebapp.utils.DataDAO; @WebServlet("/login") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; public LoginServlet() { super(); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher dispatcher // = this.getServletContext().getRequestDispatcher("/WEB-INF/views/loginView.jsp"); dispatcher.forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userName = request.getParameter("userName"); String password = request.getParameter("password"); UserAccount userAccount = DataDAO.findUser(userName, password); if (userAccount == null) { String errorMessage = "Invalid userName or Password"; request.setAttribute("errorMessage", errorMessage); RequestDispatcher dispatcher // = this.getServletContext().getRequestDispatcher("/WEB-INF/views/loginView.jsp"); dispatcher.forward(request, response); return; } AppUtils.storeLoginedUser(request.getSession(), userAccount); // int redirectId = -1; try { redirectId = Integer.parseInt(request.getParameter("redirectId")); } catch (Exception e) { } String requestUri = AppUtils.getRedirectAfterLoginUrl(request.getSession(), redirectId); if (requestUri != null) { response.sendRedirect(requestUri); } else { // Mặc định sau khi đăng nhập thành công // chuyển hướng về trang /userInfo response.sendRedirect(request.getContextPath() + "/userInfo"); } } }

    package org.o7planning.securitywebapp.utils; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpSession; import org.o7planning.securitywebapp.bean.UserAccount; public class AppUtils { private static int REDIRECT_ID = 0; // Lưu trữ thông tin người dùng vào Session. public static void storeLoginedUser(HttpSession session, UserAccount loginedUser) { // Trên JSP có thể truy cập thông qua ${loginedUser} session.setAttribute("loginedUser", loginedUser); } // Lấy thông tin người dùng lưu trữ trong Session. public static UserAccount getLoginedUser(HttpSession session) { UserAccount loginedUser = (UserAccount) session.getAttribute("loginedUser"); return loginedUser; } public static int storeRedirectAfterLoginUrl(HttpSession session, String requestUri) { Integer id = uri_id_map.get(requestUri); if (id == null) { id = REDIRECT_ID++; uri_id_map.put(requestUri, id); id_uri_map.put(id, requestUri); return id; } return id; } public static String getRedirectAfterLoginUrl(HttpSession session, int redirectId) { String url = id_uri_map.get(redirectId); if (url != null) { return url; } return null; } }

    package org.o7planning.securitywebapp.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/logout") public class LogoutServlet extends HttpServlet { private static final long serialVersionUID = 1L; public LogoutServlet() { super(); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getSession().invalidate(); // Redrect to Home Page. response.sendRedirect(request.getContextPath() + "/"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }

    package org.o7planning.securitywebapp.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/userInfo") public class UserInfoServlet extends HttpServlet { private static final long serialVersionUID = 1L; public UserInfoServlet() { super(); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher dispatcher // = this.getServletContext().getRequestDispatcher("/WEB-INF/views/userInfoView.jsp"); dispatcher.forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

    Employee Task || Manager Task || User Info || Login || Logout &nbsp;

    /WEB-INF/views/homeView.jsp

    /WEB-INF/views/loginView.jsp

    manager1/123

    /WEB-INF/views/userInfoView.jsp

    Chạy ứng dụng:

    package org.o7planning.securitywebapp.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/employeeTask") public class EmployeeTaskServlet extends HttpServlet { private static final long serialVersionUID = 1L; public EmployeeTaskServlet() { super(); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher dispatcher // = this.getServletContext()// .getRequestDispatcher("/WEB-INF/views/employeeTaskView.jsp"); dispatcher.forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

    package org.o7planning.securitywebapp.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/managerTask") public class ManagerTaskServlet extends HttpServlet { private static final long serialVersionUID = 1L; public ManagerTaskServlet() { super(); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher dispatcher // = this.getServletContext()// .getRequestDispatcher("/WEB-INF/views/managerTaskView.jsp"); dispatcher.forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

    /WEB-INF/views/employeeTaskView.jsp

    Hello, This is a protected page!

    /WEB-INF/views/managerTaskView.jsp

    Hello, This is a protected page!

    /WEB-INF/views/accessDenied.jsp

    Chạy ứng dụng:

    Chạy ứng dụng và đăng nhập với userName = “employee1”, đây là người dùng có vai trò “EMPLOYEE”.

    Chạy ứng dụng và đăng nhập với userName = “manager1”, đây là người dùng có 2 vai trò “EMPLOYEE”“MANAGER”.

    --- Bài cũ hơn ---

  • Hướng Dẫn Sử Dụng Reveal Formatting Trong Word 2010
  • Cách Tạo Số Điện Thoại Ảo Việt Nam Để Kích Hoạt Tin Nhắn
  • Mẹo Tăng Sub Facebook Miễn Phí
  • Cách Tăng Sub Qua List Cho Facebook
  • 6 Cách Tăng Lượt Theo Dõi Thật Trên Facebook Chất Lượng Nhất
  • 4 Cách Sửa Lỗi Idm Báo Fake Serial Number

    --- Bài mới hơn ---

  • Cách Sửa Khóa Kéo Bị Tuột Cho Túi Xách, Balo, Quần Áo Cực Dễ
  • Cách Sửa Nhà Đẹp Và Tiết Kiệm Chi Phí
  • Kinh Nghiệm Sửa Nhà Cũ Đẹp Như Mới
  • 1001 Kinh Nghiệm Cải Tạo Nhà Cũ Thành Nhà Mới Của Một “phù Thủy” Gia
  • Sửa Răng Hô Và Những Điều Cơ Bản Bạn Cần Phải Biết!
  • Không phải vô cớ mà Internet Download Manager – phần mềm hỗ trợ, tăng tốc download, tải file lại được nhiều người lựa chọn sử dụng tới như vậy. Nhưng vấn đề là không phải ai cũng có khả năng để chi trả cho việc sử dụng một phần mềm bản quyền. Chính vì vậy mà có những bản “không chính thống”, được sửa chữa để cung cấp cho người dùng có thể sử dụng thoải mái mà không cần mua hay đăng ký.

    Tuy nhiên, đôi khi chính những bản “lậu” như thế lại là nguyên nhân chính dẫn tới việc nhiều người sử dụng Internet Download Manager – IDM và bị thông báo lỗi fake serial number:

      Internet Download Manager has been registered with a fake Serial Number or the Serial Number has been blocked. IDM is exiting…

    Đây không phải là lỗi quá nghiêm trọng, nhưng đôi khi cũng khá rắc rối. Trong bài viết này chúng ta sẽ cùng tìm hiểu cách xử lý lỗi này mà không cần dùng tới công cụ hay phần mềm trợ giúp nào khác.

    4 cách khắc phục lỗi “IDM has been registered with a fake Serial Number”:

    Làm thế nào để sửa lỗi idm fake serial

    Cách 1: Sửa trong file cài đặt của IDM:

    Tiếp theo, bạn tìm vào thư mục chứa file cài đặt của Internet Download Manager. Có thể tìm theo đường dẫn sau:

    C:Program Files (x86)Internet Download Manager

    Nhìn sang cửa sổ bên phải, tìm file có tên là “IDMGrHlp.exe” hoặc “IDMGrHlp”, lúc này, các bạn có thể đổi tên file thành bất kỳ tên nào bạn muốn, hoặc đơn giản nhất, là xóa nó đi (tốt nhất là nên xóa đi cho tiện).

    Tuy nhiên, đến bước này vẫn chưa thể coi là hoàn tất được. Bởi khi xóa hoặc đổi tên file IDMGrHlp đi rồi, mỗi lần bạn khởi động IDM lên để dùng, sẽ nhận được thông báo: “IDM cannot find 1 files that are necessary for browser and system integration. Please reinstall IDM”. Tiếp tục làm như sau:

      Tìm đến tệp có tên “idmBroker” và copy thêm 1 tệp nữa.

      Đổi tên tệp vừa copy thành tên giống như tên file vừa xóa. Như trong hướng dẫn này, chúng ta đặt lại tên tệp “idmBroker – Copy” thành “IDMGrHlp”. Sau đó Enter để lưu lại là xong.

    Cách 2: Thay đổi giá trị trong Registry:

    Các bạn mở hộp thoại Start / Run (hoặc bấm phím tắt Windows + R để mở Run), nhập vào ô tìm kiếm Regedit, sau đó nhấn OK hoặc Enter:

    HKEY_CURRENT_USERSoftwareDownloadManager

    Nhìn sang cửa sổ bên phải, các bạn sẽ thấy:

    • File “CheckUpdtVm”
    • Kích đúp vào file đó và chuyển giá trị mặc định trong ô “Value data” từ “10” thành “0”.
    • Nhấn vào OK để lưu lại.

    Cách 3: Sửa file host:

    Các bạn vào “My Computer”, chọn ổ C: và tìm vào file host theo đường dẫn:

    C:WindowsSystem32driversetc

    127.0.0.1 Cangngamcangyeu.com http://www.tonec.com

    127.0.0.1 Cangngamcangyeu.com http://www.registeridm.com

    127.0.0.1 Cangngamcangyeu.com internetdownloadmanager.com

    127.0.0.1 http://www.internetdownloadmanager.com

    127.0.0.1 Cangngamcangyeu.com mirror.internetdownloadmanager.com

    127.0.0.1 Cangngamcangyeu.com chúng tôi

    Cách 4: Chỉnh sửa trong file IDMGrHlp:

    Ở cửa sổ tiếp theo, các bạn làm như sau:

    • Chọn thẻ “Security”.
    • Nhấp tiếp vào “Edit”.

    Trong giao diện của “Permissions for IDMGrHlp”, các bạn nhìn vào mục “Permissions for ALL APPLICATION PACKAGES”, ở cột “Deny”, chọn vào ô đầu tiên “Full control”, sau đó “Apply”“OK” để hoàn tất.

    Xem video hướng dẫn cách xử lý lỗi IDM báo Fake Serial Number:

    --- Bài cũ hơn ---

  • Tổng Hợp Lỗi Thường Gặp Với Idm Và Cách Khắc Phục
  • Mẹo Hay Cho Bạn: Cách Chữa Giày Da Bị Bong Tróc Trở Lại Như Mới
  • 9 Mẹo Xử Lí Khi Cây Bút Bi Bị Tắc Mực Hiệu Quả Nhất
  • Cách Sửa Bồn Cầu Hiệu Quả Khi Nước Không Tự Bơm Lên Bể Chứa
  • Cách Sửa Phao Bồn Cầu Đơn Giản Hiệu Quả
  • Cách Tạo Facebook Ảo, Cách Tạo Facebook Không Bị Khoá

    --- Bài mới hơn ---

  • Kinh Nghiệm Tạo Facebook Không Bị Khóa 2022
  • Hướng Dẫn Tạo Website Bằng Google Site Rất Dễ Ai Cũng Làm Được
  • Cách Tạo Infographic Thật Thu Hút Tạo Nên Chiến Dịch Marketing Hiệu Quả
  • 8 Công Cụ Thần Kì Để Tạo Infographic
  • Làm Thế Nào Để Tạo Nhiều Tài Khoản Gmail Chỉ Với 1 Số Điện Thoại ?
  • Tại sao cần lập nick facebook ảo?

    Như đã nói ở trên, lập nick ảo thực sự có ích đối với những bạn bán hàng online, hoặc những bạn làm tất cả các loại hình dịch vụ marketing, dịch vụ Facebook.

    • Giúp bạn triển khai các chiến lược seeding trên Facebook được đơn giản và thuận lợi hơn.
    • Lập nick facebook ảo để phục vụ việc đánh giá 5 sao cho một trang fanpage nào đó.
    • Tiếp đó, tạo nhiều nick facebook để giúp cho các chiến lược marketing cũng như quảng bá sản phẩm tốt hơn
    • Thậm chí bạn còn có thể sử dụng các tài khoản ảo này để check in cho một địa điểm.
    • Hoặc sử dụng chính những nick đó để đánh giá 5 sao cho fanpage đang phát triển của bạn.
    • Hoặc sử dụng làm nhiều thứ khác để phục vụ mục tiêu bán hàng online được tốt hơn.

    Do đó, cách tạo facebook ảo sẽ giúp cho phương án tốt nhất bạn không nên bỏ qua. Đây cũng chính là cách loại bỏ tất cả các trở ngại về email đăng ký, hay số điện thoại xác nhận.

    Cách lập nick facebook ảo không cần Email

    Bước 1: Truy Cập Web Tạo Email Ảo Để Tạo Fb Ảo

    Trước tiên bạn cần truy cập vào trang sau: https://10minutemail.net/. Trang web này cho phép bạn tạo email ảo cũng như tạo thêm nhiều tài khoản facebook.

    Bước 2: Tạo Tài Khoản Facebook Ảo Với Email Mà Bạn Vừa Nhận Được

    Ở bước này bạn chỉ cần truy cập vào trang đăng ký tài khoản facebook, mà không cần bất kỳ số điện thoại nào.

    Và thực hiện các bước đăng ký bình thường. Sau khi hoàn tất các bước đăng ký bạn sẽ đến một bước vô cùng quan trọng nữa, đó chính là xác nhận email đăng ký.

    Bước 3: Xác Nhận Email Ảo

    Để có thể xác nhận được email đăng ký, bạn chỉ cần kéo xuống bên dưới một chút, sẽ có một thấy thư mục hộp thư đến.

    Khi bạn nhận được email yêu cầu xác nhận facebook thì email này sẽ hiển thị ở đây. Lúc này bạn chỉ cần copy đoạn mã xác nhận và paste vào ô, hoàn tất bước xác nhận là ok.

    Bước 4: Lấy Thêm Mail Để Tạo Facebook Ảo

    Sau khi thực hiện xong các bước trên, bạn chỉ cần nhấp vào lựa chọn Làm mới trang này, lúc này hệ thống sẽ cung cấp cho bạn một email mới trong vòng 10 phút.

    Bên cạnh cách tạo facebook ảo không cần địa chỉ email tạm thời, bạn còn có thể tạo nick facebook ảo không cần số điện thoại ảo ở Mỹ. Mà không cần đăng ký số điện thoại ở Việt Nam. Để tạo nick facebook ảo theo cách này bạn cần thực hiện theo cách sau:

    Bước 1: Đầu tiên truy cập vào web tạo số điện thoại ảo

    Bước này bạn chỉ cần truy cập vào website https://textnow.com.

    Bước 2: Nhập địa chỉ email

    Bước 3: Thực hiện đăng ký thông tin

    Bước 4: Điền số mã vùng

    Sau khi thực hiện xong bước trên, sẽ có một cửa sổ get Free Phone Number hiển thị. Tại đây bạn chỉ cần điền mã vùng với 3 số theo tiêu chuẩn của Mỹ.

    Thông thường bạn có thể sử dụng các mã vùng sau: 202, 618, 532. Trong trường hợp bạn muốn lấy nhiều mã vùng hơn thì có thể truy cập vào next Plus để lấy các mã vùng của các bang khác tại Mỹ.

    Bước 5: Bắt tay vào việc tạo facebook ảo

    Sau khi thực hiện xong các bước trên. Chúng ta sẽ tiến hành đăng nhập vào tài khoản facebook trên máy tính như bình thường. Bằng cách nhập số điện thoại và password.

    Bước 6: Sau cùng hãy truy cập vào trang web textnow lần nữa

    Lúc này sẽ có một mã xác nhận được gửi về số điện thoại. Việc của bạn lúc này là sử dụng mã này để xác nhận tạo tài khoản facebook ảo .

    Vậy là Huy blogs vừa chia sẻ đến các bạn cách tạo facebook ảo không bị khóa an toàn nhất.

    --- Bài cũ hơn ---

  • Facebook Ảo Là Gì ? Hướng Dẫn Cách Tạo Facebook Ảo Hàng Loạt Đơn Giản Và Miễn Phí
  • Cách Tạo Email Ảo Gmail Mà Không Cần Dùng Số Điện Thoại
  • Bật Mí Cách Tạo Custom Pubg Mobile Chi Tiết Nhất Hiện Nay
  • Tạo Phòng Tuỳ Chỉnh Để Cùng Chinh Chiến Cùng Bạn Bè Trong Pubg Mobile, Bạn Đã Biết Chưa?
  • Cách Tạo Custom Pubg Mobile Hiệu Quả Nhất Cho Người Mới
  • Cách Sửa Lỗi Idm Báo Fake Serial Number

    --- Bài mới hơn ---

  • Những Cách Cải Tạo Sửa Chữa Nhà Cũ Đẹp Tối Ưu Diện Tích Cho Nhà Phố
  • Sửa Chữa Cải Tạo Nhà Cấp 4: Kinh Ngiệm, Chi Phí, Mẫu Đẹp
  • Top 8 Kinh Nghiệm Sửa Chữa, Cải Tạo Nhà Cũ Thành Nhà Mới
  • 4 Mẹo Nhỏ Cứu Nguy Son Gãy Cực Hay – Có Thể Bạn Chưa Biết
  • Cách Khắc Phục Son Môi Bị Gãy
  • Nguyên nhân dẫn đến lỗi IDM báo Fake Serial Number là gì? 

    Trong quá trình dùng những phần mềm hỗ trợ máy tính như Download – Internet Download Manager,  thì người dùng thường sẽ gặp phải thông báo: “Internet Download Manager has been registered with a fake Serial Number or the Serial Number has been blocked. IDM is exiting…”.

    Cách sửa lỗi IDM báo Fake Serial Number

    Có rất nhiều cách để khắc phục được lỗi IDM báo Fake Serial Number như sửa File Host, vô hiệu hoá thông báo, thay đổi Registry, hoặc bạn có thể mua lại bản quyền phần mềm từ nhà phát triển. Đây chính là những cách tối ưu và dễ dàng thực hiện nhất bạn có thể tham khảo.

    1- Xóa file chúng tôi trong IDM

    • Bước 1: Đầu tiên, bạn hãy thoát IDM, End Process chúng tôi trong mục Task Manager để đảm bảo chắc chắn rằng IDM đã được đóng.

    • Bước 2: Sau đó trong thư mục cài đặt IDM, bạn hãy tìm đến file chúng tôi rồi xóa nó đi. Thường file này là nằm trong mục C:Program Files (x86)Internet Download Manager.

    • Bước 3: Tiếp đến bạn hãy tìm file chúng tôi và tạo thêm 1 bản copy của nó. Bạn hãy đổi tên file idmBroker – chúng tôi thành IDMGrHlp.exe.

    2. Đổi giá trị trong Registry

    – Bước 1: Bạn hãy mở hộp thoại Start/Run bằng cách bấm phím tắt Windows + R. Sau đó, bạn hãy nhập Regedit vào ô tìm kiếm, rồi nhấn OK hoặc Enter:

    – Bước 2: Cửa sổ Registry Editor sẽ xuất hiện, bạn hãy tìm theo đường dẫn sau: “HKEY_CURRENT_USERSoftwareDownloadManager”. 

    3. Sửa File Host

    Bạn hãy bạn vào mục “My Computer”, sau đó chọn ổ C: rồi  tìm vào File Host theo như đường dẫn: “C:WindowsSystem32driversetc”.

    Code

    127.0.0.1 star.tonec.com

    127.0.0.1 tonec.com

    127.0.0.1 www.tonec.com

    127.0.0.1 registeridm.com

    205.199.44.156 registeridm.com

    205.199.44.16 registeridm.com

    127.0.0.1 www.registeridm.com

    127.0.0.1 secure.registeridm.com

    127.0.0.1 internetdownloadmanager.com

    127.0.0.1 www.internetdownloadmanager.com

    127.0.0.1 secure.internetdownloadmanager.com

    127.0.0.1 mirror.internetdownloadmanager.com

    127.0.0.1 mirror2.internetdownloadmanager.com

    127.0.0.1 mirror3.internetdownloadmanager.com

    --- Bài cũ hơn ---

  • #1: Hướng Dẫn Cách Sửa Giày Thể Thao Hỏng Cũ Đơn Giản Tại Nhà
  • Bồn Cầu Bị Rỉ Nước – 4 Nguyên Nhân Chính Và Cách Sửa Chi Tiết
  • Bồn Cầu Bị Rò Rỉ Chảy Nước Liên Tục – Nguyên Nhân Và Cách Xử Lý
  • Dễ Dàng Sử Dụng Trình Chỉnh Sửa Pdf Trực Tuyến
  • Top 7 App Chỉnh Sửa Ảnh Đẹp Nhất Hiện Nay Miễn Phí Cho Điện Thoại
  • Web hay
  • Links hay
  • Push
  • Chủ đề top 10
  • Chủ đề top 20
  • Chủ đề top 30
  • Chủ đề top 40
  • Chủ đề top 50
  • Chủ đề top 60
  • Chủ đề top 70
  • Chủ đề top 80
  • Chủ đề top 90
  • Chủ đề top 100
  • Bài viết top 10
  • Bài viết top 20
  • Bài viết top 30
  • Bài viết top 40
  • Bài viết top 50
  • Bài viết top 60
  • Bài viết top 70
  • Bài viết top 80
  • Bài viết top 90
  • Bài viết top 100