2015-12-13 16 views
10

Tôi hiện đang viết một hệ thống nhận xét cho các trang web có Spring Boot sẽ dựa trên một API REST đơn giản.Phân biệt người dùng không có xác thực trong Spring

Để cho phép mọi người xóa hoặc cập nhật nhận xét họ đã đăng trước đó, tôi muốn lưu trữ mã thông báo duy nhất trong Cookie để ghi nhớ/nhận dạng chúng. Người dùng là không phải cần thiết để đăng ký để đăng nhận xét. Khi người dùng xóa cookie hoặc khi cookie hết hạn, sẽ không có cách nào để lấy lại quyền để xóa/sửa đổi nhận xét.

Tất nhiên có thể tự mình thực hiện một chức năng như vậy bằng bộ lọc, nhưng tôi muốn biết liệu có cách nào tiêu chuẩn để thực hiện việc này trong Spring (có thể sử dụng Spring Security) không? Tôi nghĩ rằng đây sẽ là một kịch bản phổ biến, nhưng tất cả các ví dụ tôi có thể tìm thấy bao gồm thông tin xác thực như tên người dùng/mật khẩu.

+0

Tại sao xuống bỏ phiếu? –

+0

Dường như một thiết kế lạ để sử dụng cookie xác định trình duyệt để giữ quyền. Gần hơn là tùy chọn tiêu chuẩn * nhớ tôi * trong Spring Framework, nhưng nó chỉ được sử dụng sau khi xác thực thành công - và chỉ được sử dụng như một gợi ý cho kết nối tiếp theo ... –

Trả lời

6

Điều này có thể đạt được bằng cách tạo triển khai tùy chỉnh SecurityContextRepository.

  1. Tạo triển khai SecurityContextRepository tải thông tin xác thực từ cookie.
  2. Tạo triển khai AuthenticationProvider để kiểm tra xem cookie có chứa giá trị hợp lệ hay không. Tiền tố và/hoặc hậu tố có thể được thêm vào giá trị cookie và giá trị có thể được mã hóa để đảm bảo tính xác thực và ngăn chặn mạo danh.

Tôi có một sample app minh họa các thành phần sẽ được triển khai. Mẫu lưu trữ thông tin xác thực trong bộ nhớ cache trong bộ nhớ nhưng nó có thể được lưu trữ trong HttpSession hoặc bất kỳ kho dữ liệu nào khác theo yêu cầu. Mã này nằm trong Scala nhưng phải dễ đọc đối với các lập trình viên Java.

4

Với Spring Security, bạn có thể viết Bộ lọc tùy chỉnh để đạt được chức năng mà bạn cần. Ví dụ, kiểm tra RestTokenValidationFilter, cái này đọc Tiêu đề Cấp phép và xác nhận xem mã thông báo có hợp lệ hay không bằng cách tìm mã thông báo trong cơ sở dữ liệu.

Bạn có thể sử dụng mẫu tương tự. Thay vì đọc Tiêu đề ủy quyền, bạn có thể đọc cookie và Xác thực người dùng.

1

Bạn có thể dễ dàng ghi đè lên thực hiện an ninh mùa xuân

  1. Bạn có url không được bảo vệ nói xác thực, trong đó bạn sẽ gửi tên người dùng và mật khẩu cho máy chủ. sử dụng

  2. Authenticate dựa vào tên người dùng và mật khẩu

  3. Tạo thẻ an toàn.

  4. Gửi mã thông báo trong mọi yêu cầu truy cập tài nguyên.

Dưới đây là hoàn toàn ví dụ làm việc:
https://github.com/philipsorst/angular-rest-springsecurity

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