Tôi muốn bộ điều khiển của mình trả lại mã phản hồi HTTP đúng khi người dùng không có quyền xem một trang cụ thể.Làm cách nào để trả lại 403 Cấm trong Spring MVC?
Trả lời
Quickie
Nếu bạn đang sử dụng quan điểm đồng bằng JSP (như là phổ biến nhất), sau đó chỉ cần thêm
<% response.setStatus(403); %>
nơi nào đó trong tập tin nhìn của bạn. Ở trên cùng là một nơi tốt đẹp.
chi tiết
Trong MVC, tôi sẽ luôn đặt này trong giao diện, và trong nhiều trường hợp với mùa xuân-MVC, sử dụng SimpleMappingExceptionResolver
để trình bày quan điểm đúng để đáp ứng với một ngoại lệ thời gian chạy ném.
Ví dụ: tạo và ném PermissionDeniedException
trong bộ điều khiển hoặc lớp dịch vụ của bạn và có điểm giải quyết ngoại lệ cho tệp xem permissionDenied.jsp
. Tệp xem này đặt trạng thái 403 và hiển thị cho người dùng một thông báo thích hợp.
Trong mùa xuân tập tin đậu XML của bạn:
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="PermissionDeniedException">
rescues/permissionDenied
</prop>
... set other exception/view mappings as <prop>s here ...
</props>
</property>
<property name="defaultErrorView" value="rescues/general" />
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
Nếu bạn cần phải thực hiện một cơ chế đăng nhập người dùng, hãy xem Spring Security (trước đây là Acegi Security).
Sử dụng ExceptionResolver
là một cách tuyệt vời để thực hiện, nhưng nếu bạn chỉ muốn tính năng này độc lập với chế độ xem, bạn có thể thực hiện cuộc gọi đến response.sendError(HttpServletResponse.SC_FORBIDDEN, "AdditionalInformationIfAvailable");
trong Bộ điều khiển của mình.
Tạo ngoại lệ được chú thích với @ResponseStatus ví dụ: như thế này:
@ResponseStatus(HttpStatus.FORBIDDEN)
public class ForbiddenException extends RuntimeException {
}
Bây giờ chỉ cần ném ngoại lệ đó trong phương pháp xử lý của bạn và phản ứng sẽ có tư cách 403.
Bạn cũng có thể chỉ cần ném
org.springframework.security.access.AccessDeniedException("403 returned");
này trả về một 403 trong phản ứng tiêu đề.
Công cụ này hoàn hảo và cần câu trả lời được chấp nhận bởi vì nó linh hoạt nhất. – Heady
@Heady: Không thực sự là câu trả lời hay nhất vì nó tạo ra sự phụ thuộc mạnh mẽ với Spring Security. Câu trả lời của Joe, để tạo ra Ngoại lệ của riêng bạn, là IMO tốt nhất. Tôi vẫn upvoted rằng một vì nó là một thay thế khá. –
Điều này trả về 500 cho tôi. – heez
- 1. Máy chủ từ xa trả lại lỗi: (403) Bị cấm
- 2. script php 403 lỗi cấm
- 3. Có cách nào để buộc apache trả lại 404 thay vì 403 không?
- 4. django ajax post 403 bị cấm
- 5. Tại sao dịch vụ WCF tự lưu trữ của tôi trả lại 403 Cấm, thay vì 401 Không được phép?
- 6. ELMAH - MVC 3 - 403 - Bị cấm: Truy cập bị từ chối
- 7. Nginx phục vụ tệp tĩnh và bị 403 cấm
- 8. Nginx + Hành khách + Đường ray - 403 bị cấm
- 9. 403/Trang lỗi nghiêm cấm với Express 3/Node
- 10. Trả lại HTTP 403 theo phương thức WebAPI
- 11. 403 - Bị cấm: Quyền truy cập bị từ chối. ASP.Net MVC
- 12. Tìm kiếm trên iTunes API JSON trả về 403 bị cấm trên máy chủ
- 13. Trong MVC, làm cách nào để trả lại kết quả chuỗi?
- 14. 403 Lỗi bị cấm với Django và mod_wsgi
- 15. Làm thế nào để đối phó với lỗi CURL 403 bị cấm? bất kỳ giải pháp nào?
- 16. Python CGI trả lại mã trạng thái http, chẳng hạn như 403?
- 17. 403 bị cấm: quyền truy cập hình ảnh
- 18. Git: Lỗi tạo yêu cầu kéo: Bị cấm (HTTP 403)
- 19. Spring MVC 3 - Trả lời yêu cầu với 404?
- 20. Tại sao Ant trả lại 403 khi triển khai?
- 21. Làm cách nào để trả lại hình ảnh đúng cách trong phản hồi trong ứng dụng Mùa xuân?
- 22. Set trang 403 lỗi trong MVC
- 23. ASP.net MVC trả lại JSONP
- 24. Bắt lỗi "Máy chủ từ xa trả về lỗi: (403) Cấm" khi cạo màn hình bằng cách sử dụng HttpWebRequest.GetResponse()
- 25. Trong bash, làm cách nào để đặt mã trả lại?
- 26. Spring MVC 3: Trả về XML thông qua @ResponseBody
- 27. làm thế nào để trả lại một FileResult từ một chuỗi trong asp.net MVC
- 28. ASP.NET MVC Xem một phần trong Java Spring MVC
- 29. Spring MVC vs ASP.NET (MVC?)
- 30. 403 Cấm Bạn không có quyền truy cập/tên thư mục/trên máy chủ này
Tại sao response.setStatus lại cần thiết? Theo sau đáp ứng (trong Tomcat), có vẻ như có sự phát triển strage của mã phản hồi http của phản hồi - nó là 200 đầu tiên (mặc định), sau đó di chuyển đến 404 (vì lợi ích của đối số) khi Spring DispatcherServlet xử lý ngoại lệ xử lý, sau đó, khung nhìn được hiển thị và mã được đặt thành 500 (là lạ), và sau đó, setStatus thực sự khắc phục sự cố bằng cách hoàn nguyên mã phản hồi về 404. – Eugen