🐛 Fixing a bug. 统一security异常导致remotetokenservice 无法解析问题解决
This commit is contained in:
1 parent
61d8d9c6e1
commit
a8072e7452
17 files changed
+518
-25
No files matched your search
+14
-1
@@ -24,9 +24,13 @@ import org.springframework.cloud.client.loadbalancer.LoadBalanced;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.client.ClientHttpResponse;
|
||||
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
|
||||
import org.springframework.web.client.DefaultResponseErrorHandler;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
@@ -39,7 +43,16 @@ public class PigxResourceServerAutoConfiguration {
|
||||
@Primary
|
||||
@LoadBalanced
|
||||
public RestTemplate lbRestTemplate() {
|
||||
return new RestTemplate();
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
|
||||
@Override
|
||||
public void handleError(ClientHttpResponse response) throws IOException {
|
||||
if (response.getRawStatusCode() != HttpStatus.BAD_REQUEST.value()) {
|
||||
super.handleError(response);
|
||||
}
|
||||
}
|
||||
});
|
||||
return restTemplate;
|
||||
}
|
||||
|
||||
@Bean
|
||||
|
||||
+9
-6
@@ -26,6 +26,7 @@ import org.springframework.security.access.AccessDeniedException;
|
||||
import org.springframework.security.core.AuthenticationException;
|
||||
import org.springframework.security.oauth2.common.DefaultThrowableAnalyzer;
|
||||
import org.springframework.security.oauth2.common.OAuth2AccessToken;
|
||||
import org.springframework.security.oauth2.common.exceptions.ClientAuthenticationException;
|
||||
import org.springframework.security.oauth2.common.exceptions.InsufficientScopeException;
|
||||
import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
|
||||
import org.springframework.security.oauth2.common.exceptions.OAuth2Exception;
|
||||
@@ -33,8 +34,6 @@ import org.springframework.security.oauth2.provider.error.WebResponseExceptionTr
|
||||
import org.springframework.security.web.util.ThrowableAnalyzer;
|
||||
import org.springframework.web.HttpRequestMethodNotSupportedException;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author lengleng
|
||||
* @date 2018/7/8
|
||||
@@ -86,7 +85,7 @@ public class PigxWebResponseExceptionTranslator implements WebResponseExceptionT
|
||||
|
||||
}
|
||||
|
||||
private ResponseEntity<OAuth2Exception> handleOAuth2Exception(OAuth2Exception e) throws IOException {
|
||||
private ResponseEntity<OAuth2Exception> handleOAuth2Exception(OAuth2Exception e) {
|
||||
|
||||
int status = e.getHttpErrorCode();
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
@@ -96,10 +95,14 @@ public class PigxWebResponseExceptionTranslator implements WebResponseExceptionT
|
||||
headers.set("WWW-Authenticate", String.format("%s %s", OAuth2AccessToken.BEARER_TYPE, e.getSummary()));
|
||||
}
|
||||
|
||||
ResponseEntity<OAuth2Exception> response = new ResponseEntity<>(new PigxAuth2Exception(e.getMessage()), headers,
|
||||
HttpStatus.valueOf(status));
|
||||
// 客户端异常直接返回客户端,不然无法解析
|
||||
if (e instanceof ClientAuthenticationException) {
|
||||
return new ResponseEntity<>(e, headers,
|
||||
HttpStatus.valueOf(status));
|
||||
}
|
||||
|
||||
return response;
|
||||
return new ResponseEntity<>(new PigxAuth2Exception(e.getMessage()), headers,
|
||||
HttpStatus.valueOf(status));
|
||||
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user