私は以下の問題があります。Springブートによって提供されるAuthenticationProviderクラスをカスタマイズして、リモートサーバー上にあります。SpringのAuthentication APIで、HTTPステータスが403の場合のREST APIからの応答を傍受する方法
資格情報が正しい場合は問題ありません。
問題は、資格情報が間違っている、サーバの応答の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と組み合わせて、おそらく動作するかもしれません。 –