我有以下問題:我自定義的AuthenticationProvider類,彈簧啓動提供,調用REST服務,以使登錄在遠程服務器上。如何攔截來自REST API中的403個HTTP狀態情況下的響應,在Spring類的AuthenticationProvider
如果憑據是正確的,沒問題。
問題出現時的憑據是不正確的,服務器響應HTTP狀態是403 在實踐中,我無法獲得響應,因爲它會自動升起API其餘的異常:
ResponseEntity <UserResponse> resp = restTemplate.exchange (url, HttpMethod.POST, requestEntity, UserResponse.class);
我試圖創建自定義類,以通過 @ControllerAdvice註釋捕獲異常,但它不能被調用,因爲該異常不是在控制器中出現,而是出現在AuthenticationProvider類中。
有沒有辦法攔截休息API的異常反應?
public class CustomAuthenticationProvider implements AuthenticationProvider {
private static final Logger log = LoggerFactory.getLogger(CustomAuthenticationProvider.class);
@Value("${search.login}")
private String searchLogin;
@Autowired
private HttpServletRequest request;
private DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
User user=new User();
ObjectWriter ow = new ObjectMapper().writer();
String json="log-> ";
UserResponse response=new UserResponse();
try {
RestTemplate restTemplate = new RestTemplate();
URI url;
url = new URI(searchLogin);
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
map.add("username",URLEncoder.encode(authentication.getName(), "utf-8"));
map.add("password",URLEncoder.encode(authentication.getCredentials().toString(), "utf-8"));
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
List<MediaType> acceptableMediaTypes=new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
requestHeaders.setAccept(acceptableMediaTypes);
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(map,requestHeaders);
ResponseEntity<UserResponse> resp = restTemplate.exchange(url, HttpMethod.POST, requestEntity, UserResponse.class);
response = resp.getBody();
在此先感謝。
什麼是你想要做* *?你說你不能「得到迴應」 - 在哪裏?出於什麼目的?看起來你正在得到一個正確的答案(403) - 特別是,你想與衆不同嗎? – chrylis
是的,我得到正確的403,但我想閱讀回覆並在日誌中打印。但是,在春天的框架之前出現以及處理的異常,不能閱讀回答。 – Maforast
當你得到403,那麼你可以確定發生異常並打印它來記錄。是嗎 ?或者你可以嘗試捕獲異常並再次拋出,與@ExcepionHandler結合,也許它可以工作。 –