2012-05-30 49 views
5

Tôi có một ứng dụng Jersey được định cấu hình với xác thực xử lý bảo mật mùa xuân. Gói jersey-spring đang cung cấp lớp SpringServlet được đăng ký trong web.xml của tôi như là một servlet.Xử lý ngoại lệ của bộ lọc và bộ lọc

Xác thực và tất cả hoạt động như mong đợi. Những gì tôi tự hỏi là làm thế nào để có các AuthenticationExceptions (và các ngoại lệ bộ lọc khác) được gửi qua servlet Jersey, vì vậy tôi có thể sử dụng ExceptionMapper để xử lý chúng. Ban đầu SpringServlet được cấu hình như một bộ lọc, nhưng sau khi thực hiện một số đọc, tôi đã hiểu rằng một servlet sẽ có thể xử lý các ngoại lệ được ném trong các bộ lọc (có thể đó là một sự hiểu biết không chính xác). Tôi không nhận thấy bất kỳ thay đổi nào về hành vi sau khi thay đổi nó thành một servlet, và nếu tôi theo dõi qua mã bảo mật mùa xuân, tôi có thể thấy nơi HttpServletResponse đang được viết.

Câu hỏi của tôi: Có thể có ngoại lệ quy trình servlet Jersey được bộ lọc bảo mật mùa xuân đưa ra không?

+0

Xin chào Nick, bạn có thể xuất bản SSCCE thể hiện thiết lập của riêng bạn không? –

+0

Có, tôi sẽ thêm một mẫu nhỏ ngay sau khi tôi có cơ hội. –

Trả lời

0

Cách bạn thực hiện tùy thuộc vào việc bạn đang gọi Jersey từ Spring Security hay Spring Security từ Jersey.

Nếu bạn đang gọi bảo mật mùa xuân từ bên trong thùng chứa Jersey, thì bạn không cần phải làm bất cứ điều gì khác ngoài việc xác định người lập bản đồ ngoại lệ cho ngoại lệ thích hợp.

Nếu bạn gọi Jersey chỉ khi khách hàng vượt qua bộ lọc bảo mật mùa xuân, thì bất kỳ ngoại lệ nào được ném trong khi yêu cầu khách hàng đi qua các bộ lọc đó sẽ không bị bắt bởi Jersey (vì yêu cầu chưa được đưa vào vùng chứa Jersey) . Một cách để "được" trừ vào container Jersey là:

  1. bắt các AuthenticationException trong một bộ lọc xác thực tùy chỉnh và gọi AuthenticationFailureHandler.onAuthenticationFailure() phương pháp (đi qua trong ngoại lệ), và chắc chắn rằng để phá vỡ chuỗi lọc theo không gọi FilterChain.doFilter()
  2. cấu hình của bạn AuthenticationFailureHandler để gọi một nguồn Jersey thiết kế của bạn mà sẽ lấy (và sau đó lại ném) bất kỳ trường hợp ngoại lệ được tạo ra bởi mùa xuân với HttpServletRequest.getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION)

Có thể có những cách khác để "lấy" ngoại lệ vào vùng đất Jersey, nhưng đây là một cách làm việc cho tôi trong quá khứ.

+0

Cảm ơn bạn đã phản hồi về câu hỏi thực sự cũ này; vấn đề vẫn còn, nhưng tôi sẽ đưa ra gợi ý của bạn ngay khi có thể. Tôi đã không làm việc trên dự án một thời gian mặc dù! –

+0

Rất tiếc, đã không nhận ra sự cố quá cũ .. – maxenglander

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