2012-06-25 42 views
10

Cách thức chuẩn để thực hiện xác thực biểu mẫu với Java Servlets là gì?Xác thực biểu mẫu chuẩn Java servlets

Kể từ bây giờ tôi đã thực hiện điều đó bản thân mình sử dụng một hình thức POST HTML đơn giản:

  1. kiểm tra các thông số gửi đối với cơ sở dữ liệu
  2. nếu có, tiết kiệm một đối tượng tài khoản vào HttpSession
  3. kiểm tra trong mỗi Servlet cho dù đối tượng này có mặt là
  4. nếu không: chuyển hướng đến trang đăng nhập bằng thông báo lỗi

Nhưng bây giờ tôi đã tình cờ gặp How to Configure Security with Embedded Jetty và bây giờ tôi đang nghĩ đến việc tôi có thể tái sử dụng các giải pháp đã được triển khai cho vấn đề đó, nhưng cách tiếp cận tiêu chuẩn ở đây là gì? Tôi đang sử dụng Jetty bản thân mình, nhưng những gì về Tomcat hoặc máy chủ web khác?

Tôi cũng đọc khoảng j_security_check, có gì với điều đó? Đó có phải là phương pháp kế thừa không?

Trả lời

14

Bạn nên sử dụng bảo mật JAAS do các thùng chứa Servlet cung cấp như Tomcat, Websphere, Glassfish.

Theo mặc định các container hỗ trợ các loại xác thực:

  • BASIC
  • DIGEST
  • MẪU
  • KHÁCH HÀNG-CERT

HTTP Basic Authentication

Chỉ định xác thực cơ sở HTTP yêu cầu máy chủ yêu cầu tên người dùng và mật khẩu từ máy khách web và xác minh rằng tên người dùng và mật khẩu hợp lệ bằng cách so sánh chúng với cơ sở dữ liệu của người dùng được ủy quyền trong lĩnh vực được chỉ định hoặc mặc định.

Xác thực cơ bản là mặc định khi bạn không chỉ định cơ chế xác thực.

Khi xác thực cơ bản được sử dụng, những hành động sau đây xảy ra:

  1. Một khách hàng yêu cầu quyền truy cập vào một tài nguyên được bảo vệ.
  2. Máy chủ web trả về hộp thoại yêu cầu tên người dùng và mật khẩu.
  3. Khách hàng gửi tên người dùng và mật khẩu cho máy chủ. 4. \ Máy chủ xác thực người dùng trong lĩnh vực được chỉ định và, nếu thành công, trả về tài nguyên được yêu cầu.

Hình dưới đây cho thấy điều gì xảy ra khi bạn chỉ định xác thực cơ sở HTTP. enter image description here

HTTP Basic Authentication Sơ đồ của bốn bước trong xác thực cơ bản HTTP giữa client và server

Mẫu-Based Xác thực

xác thực Form-based cho phép các nhà phát triển để kiểm soát giao diện và cảm nhận của màn hình xác thực đăng nhập bằng cách tùy chỉnh màn hình đăng nhập và các trang lỗi mà trình duyệt HTTP hiển thị cho người dùng cuối. Khi xác thực dựa trên biểu mẫu được khai báo, các hành động sau xảy ra.

  1. Khách hàng yêu cầu quyền truy cập vào tài nguyên được bảo vệ.
  2. Nếu khách hàng chưa được xác thực, máy chủ sẽ chuyển hướng khách hàng đến trang đăng nhập.
  3. Khách hàng gửi biểu mẫu đăng nhập vào máy chủ.
  4. Máy chủ cố gắng xác thực người dùng.
  5. Nếu xác thực thành công, hiệu trưởng của người dùng đã được xác thực được chọn để đảm bảo rằng vai trò đó được ủy quyền truy cập vào tài nguyên. Nếu người dùng được ủy quyền, máy chủ chuyển hướng máy khách đến tài nguyên bằng cách sử dụng đường dẫn URL được lưu trữ.
  6. Nếu xác thực không thành công, máy khách được chuyển tiếp hoặc chuyển hướng đến trang lỗi.

Hình dưới đây cho thấy điều gì xảy ra khi bạn chỉ định xác thực dựa trên biểu mẫu.

enter image description here

Khi bạn tạo một tên đăng nhập form-based, hãy chắc chắn để duy trì các phiên sử dụng các tập tin cookie hay thông tin phiên SSL.

Để xác thực tiến hành một cách thích hợp, hành động của biểu mẫu đăng nhập phải luôn là j_security_check. Hạn chế này được thực hiện sao cho biểu mẫu đăng nhập sẽ hoạt động bất kể tài nguyên đó là gì và để tránh yêu cầu máy chủ chỉ định trường hành động của biểu mẫu gửi đi. Đoạn mã sau đây cho thấy cách thức nên được mã hóa thành các trang HTML:

<form method="POST" action="j_security_check"> 
    <input type="text" name="j_username"> 
    <input type="password" name="j_password"> 
</form> 

Digest Authentication

Giống như xác thực cơ bản, tiêu hóa xác thực xác thực người dùng dựa trên một tên người dùng và mật khẩu. Tuy nhiên, không giống như xác thực cơ bản, xác thực thông báo không gửi mật khẩu người dùng qua mạng. Thay vào đó, khách hàng gửi một băm mật mã một chiều của mật khẩu và dữ liệu bổ sung. Mặc dù mật khẩu không được gửi trên dây, xác thực thông báo yêu cầu phải có sẵn mật khẩu văn bản rõ ràng cho vùng chứa xác thực để nó có thể xác thực các trình xác thực đã nhận bằng cách tính toán thông báo dự kiến.

Tài liệu tham khảo:

-1

Chỉ thử chuyển tiếp đến trang lỗi nếu dữ liệu về người dùng không có trong cơ sở dữ liệu. Nếu bạn tìm thấy người dùng của bạn sử dụng đoạn mã sau để chuyển hướng ông đến trang "nhà" của mình

RequestDispatcher dis = request.getRequestDispatcher("relativeURL2Jsp"); 
dis.forward(request, response); 
1

Hãy thử sử dụng bộ lọc servlet, không cần phải cấu hình JAAS và nhân viên khác

Các vấn đề liên quan