18

lỗi Tôi đang sử dụng Spring Oauth2Spring Pre-post Annotations Với Spring-bootsẵn trong giai đoạn xử lý

I Have a lớp dịch vụ MyService. một trong các phương pháp MyService là:

@PreAuthorize("#id.equals(authentication.principal.id)") 
public SomeResponse getExampleResponse(String id){...} 

tôi có thể kiểm soát theo cách nào đó bộ điều khiển người gọi được trả về không?

các json được trả về theo mặc định là:

{error : "access_denied" , error_message: ".."} 

I Want để có thể kiểm soát error_message param. Tôi đang tìm một cái gì đó tương tự như:

@PreAuthorize(value ="#id.equals(authentication.principal.id)", onError ="throw new SomeException("bad params")") 
public SomeResponse getExampleResponse(String id){...} 

Một cách tôi nghĩ làm việc đó là bằng cách sử dụng ExceptionHandler

@ExceptionHandler(AccessDeniedException.class) 
public Response handleAccessDeniedException(Exception ex, HttpServletRequest request){ 
    ... 
} 

nhưng tôi không thể kiểm soát message của ngoại lệ. và tôi cũng không thể chắc chắn rằng điều này Exception sẽ được ném trong các bản phát hành trong tương lai

+0

'{error:" access_denied ", error_message:" .. "}' trông giống như đầu ra từ trình xử lý lỗi mặc định khởi động Spring. Đó là những gì bạn đang sử dụng? –

+0

yes @DaveSyer Tôi đang sử dụng Spring boot – royB

Trả lời

8

Tài liệu khởi động mùa xuân về xử lý lỗi: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-error-handling. Một cách bạn có thể kiểm soát JSON là thêm @Bean loại ErrorAttributes.

+1

cảm ơn câu trả lời của bạn. Phần tài liệu không thực sự rõ ràng và sẽ tuyệt vời khi có 'Cách thức' về chủ đề này. Phương thức 'DefaultErrorAttributes':' addErrorDetail' làm thế nào tôi có thể kiểm soát thông điệp 'Throwable error' được truyền cho' ErrorAttributes'? – royB

+0

Nếu ngoại lệ xuất phát từ '@ PreAuthorize', bạn không thể kiểm soát được nhiều (hoặc ít nhất tôi không thể thấy lý do bạn muốn). Những gì bạn có thể làm, tôi cho rằng, là thêm một tùy chỉnh 'AccessDecisionManager', nhưng đó thực sự không phải là rất chính thống. –

+3

Xin chào @DaveSyer, tôi có tình huống '@PreAuthorize (" isAuthenticated() và principal.user.isEnabled() == true và principal.user.isConfirmed() == true ")' và tôi muốn khác biệt về ràng buộc nào ném một AccessDeniedException. Sau đó xử lý nó và ném ngoại lệ của riêng tôi tùy thuộc vào điều kiện không hài lòng. Hay chỉ những gì tôi có thể làm để viết ra khía cạnh của riêng tôi và ném ngoại lệ của riêng tôi? – InsFi

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