2010-05-11 32 views
10

Tôi đã sử dụng GWT 2.0 từ một vài ngày. Vì vậy, tôi cố gắng để mã một ứng dụng cơ bản với một hình thức đăng nhập và một trang có thể truy cập chỉ khi tôi đang đăng nhập.Tích hợp GWT 2.0 với Spring Security 3.0

Thông thường trong ứng dụng web của tôi với jsf chẳng hạn, tôi sử dụng Spring Security 3.0 để định cấu hình và bảo mật loại ứng dụng đó. Vì vậy, tôi quyết định cố gắng làm điều tương tự với ứng dụng GWT 2.0 của mình.

Tôi cũng đã định cấu hình phần máy chủ của Spring Security. Vì vậy, từ trang đăng nhập GWT của tôi, tôi có thể nhập thông tin đăng nhập/mật khẩu của mình và xác thực thông qua Spring Security được thực hiện. Việc chuyển hướng đến trang bảo mật được thực hiện và tôi có thể nhận được người dùng được kết nối thông qua một cuộc gọi rpc đến dịch vụ bảo mật sử dụng SecurityContext của Spring Security. Vì vậy, tôi nghĩ rằng một phần là ok.

Nhưng, tôi gặp vấn đề lớn khi bảo mật url. Thật vậy, tôi muốn bảo mật trang để hạn chế quyền truy cập vào Role cụ thể như tôi thường làm với Spring Security.

Trong ứng dụng GWT của tôi, tôi sử dụng mẫu MVP với bộ điều khiển ứng dụng trung tâm. Vì vậy, tôi đã có chỉ một trang và cho trang đó tôi sẽ làm khác biệt quan điểm khi thêm #name_of_view vào cuối URL. Ví dụ: để truy cập vào trang đăng nhập của tôi ở chế độ phát triển, tôi sử dụng URL sau đây trên trình duyệt của mình:

http: // 127.0.0.1:8888/fr.myapp.Application/Application.html?gwt.codesvr= 127.0.0.1:9997#login

Khi tôi đang đăng nhập một cách chính xác, tôi sẽ quan điểm sau đây:

http: // 127.0.0.1:8888/fr.myapp.Application/Application.html? gwt.codesvr = 127.0.0.1: 9997 # pagesecured

Do đó, tôi không biết cách định cấu hình thẻ http trong Spring Security và cách xác định URL để chặn ảnh hưởng đến các vai trò cụ thể để hạn chế truy cập. Hơn nữa, tôi nghĩ sẽ có vấn đề khi sử dụng các URL này giữa chế độ phát triển và chế độ sản xuất cổ điển. Không?

Vì vậy, ai đó sẽ có bất kỳ ý tưởng nào để giúp tôi định cấu hình và bảo mật ứng dụng của mình bằng cách sử dụng các URL này? hoặc bằng cách sử dụng một kỹ thuật khác để bảo mật ứng dụng với đăng nhập biểu mẫu?

Cảm ơn trước vì sự giúp đỡ của bạn.

Sylvain.

Trả lời

8

Bạn không thể sử dụng bảo mật cấp trang trong trường hợp này, vì chế độ xem của bạn đang được thay đổi ở phía máy khách.

Cách duy nhất để thực hiện bảo mật dựa trên vai trò trong ứng dụng loại đó là sử dụng mã số method-level security trong mã phía máy chủ của bạn. Bạn cũng có thể giới hạn quyền truy cập vào số Application.html của mình cho những người dùng không được xác thực bằng cách tạo trang đăng nhập không phải GWT không liên quan (ví dụ: Login.html).

5

Đồng ý với @axtavt - Nói chung, bạn không thể sử dụng bảo mật cấp trang với GWT, bởi vì nó chỉ là một trang duy nhất có liên quan đến bảo mật mùa xuân.

Bạn nên làm như sau -

  1. Bảo URL RPC của bạn. Nếu được yêu cầu, bạn có thể sử dụng bảo mật mức phương thức như axtavt được chỉ ra. Để kết nối RPC với Spring Security, hãy ghi đè phương thức onAfterRequestDeserialized(RPCRequest) trong RPC Servlet của bạn.Phương thức RPCRequest có các chi tiết về phương thức được gọi và các tham số thực tế đang được truyền cho phương thức đó. Thông tin này là đủ để ngăn chặn một người dùng cập nhật hồ sơ của người dùng khác.

  2. Trong trường hợp lỗi xác thực hoặc ủy quyền trong dịch vụ RPC của bạn, hãy ném các lỗi thích hợp và gửi chúng cho khách hàng. Trong ứng dụng khách của bạn, tạo một centralized error handler và hiển thị thông báo thích hợp cho người dùng.

  3. Và cuối cùng, ngoài bảo mật mùa xuân, bạn có thể muốn tự bảo vệ mình trước XSS và CSRF. Tham khảo Security for GWT Applications để biết thêm thông tin.

1

Bạn có thể sử dụng bảo mật cấp trang, vì mô-đun GWT của bạn có thể được chia sẻ bởi hai trang sử dụng phương pháp được rustyshelf phân loại ở đây: Problem with multiple entry Points in the same module.

Nói tóm lại:

  1. Tạo một trang, ví dụ Login.html, sẽ chỉ sử dụng thông tin đăng nhập mã thông báo, cho phép bất kỳ ai truy cập vào thông tin đăng nhập và ví dụ: nó phải chứa thẻ div có thông tin đăng nhập ID.
  2. Sử dụng Application.html, với thẻ div có ứng dụng ID, sẽ dành cho mọi thứ khác và đảm bảo rằng nó sẽ không cho phép sử dụng mã thông báo đăng nhập và từ chối quyền truy cập vào bất kỳ người dùng chưa được xác thực nào.
  3. Yêu cầu mô-đun GWT của bạn tải chế độ xem thích hợp theo thẻ div nằm trên trang.

Các div trong mỗi tệp HTML nên được sử dụng để tìm ra trang HTML sẽ được hiển thị (trong onModuleLoad), nhưng sau đó div sẽ bị xóa, vì phần còn lại của ứng dụng sẽ không được dựa vào sự hiện diện của div.

Bạn cũng nên sử dụng method security để bảo vệ RPC của mình, vì ở trên sẽ chỉ bảo mật URL mà hầu hết ứng dụng của bạn sẽ hoạt động.

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