Java 如何在TokenEndPoint Spring oAuth2中注入WebResponseExceptionTranslator
我试图定制Spring Security oAuth TokenEndpoint类处理异常的方式。我想返回一个比DefaultWebResponseExceptionTranslator当前更定制的JSON响应。我不知道如何通过XML注入自定义转换器。以下是我的代码片段: spring-security.xmlJava 如何在TokenEndPoint Spring oAuth2中注入WebResponseExceptionTranslator,java,spring,spring-security,oauth-2.0,spring-security-oauth2,Java,Spring,Spring Security,Oauth 2.0,Spring Security Oauth2,我试图定制Spring Security oAuth TokenEndpoint类处理异常的方式。我想返回一个比DefaultWebResponseExceptionTranslator当前更定制的JSON响应。我不知道如何通过XML注入自定义转换器。以下是我的代码片段: spring-security.xml <oauth:authorization-server client-details-service-ref="clientDetails" token-services-
<oauth:authorization-server
client-details-service-ref="clientDetails" token-services-ref="tokenServices"
user-approval-handler-ref="userApprovalHandler" request-validator-ref="requestValidator" >
<oauth:client-credentials />
<oauth:password />
</oauth:authorization-server>
TokenEndpoint扩展了定义转换器的AbstractEndpoint
@FrameworkEndpoint
public class TokenEndpoint extends AbstractEndpoint {
@ExceptionHandler(Exception.class)
public ResponseEntity<OAuth2Exception> handleException(Exception e) throws Exception {
logger.info("Handling error: " + e.getClass().getSimpleName() + ", " + e.getMessage());
return getExceptionTranslator().translate(e);
}
所以我的问题是。如何调用setProviderExceptionHandler通过我的spring security.xml传入我的自定义类?为了自定义spring oauth的异常处理程序,您必须定义
WebResponseExceptionTranslator
的实例:
@Bean
public WebResponseExceptionTranslator webResponseExceptionTranslator() {
return new DefaultWebResponseExceptionTranslator() {
@Override
public ResponseEntity<OAuth2Exception> translate(Exception e) throws Exception {
ResponseEntity<OAuth2Exception> responseEntity = super.translate(e);
OAuth2Exception body = responseEntity.getBody();
HttpHeaders headers = new HttpHeaders();
headers.setAll(responseEntity.getHeaders().toSingleValueMap());
// do something with header or response
return new ResponseEntity<>(body, headers, responseEntity.getStatusCode());
}
};
}
只需检查基于xml配置的
可用的属性。@bgme\u当通过xml配置授权服务器时,您有什么想法吗?您得到答案了吗????
public class AbstractEndpoint implements InitializingBean {
protected final Log logger = LogFactory.getLog(getClass());
private WebResponseExceptionTranslator providerExceptionHandler = new DefaultWebResponseExceptionTranslator();
public void setProviderExceptionHandler(WebResponseExceptionTranslator providerExceptionHandler) {
this.providerExceptionHandler = providerExceptionHandler;
}
@Bean
public WebResponseExceptionTranslator webResponseExceptionTranslator() {
return new DefaultWebResponseExceptionTranslator() {
@Override
public ResponseEntity<OAuth2Exception> translate(Exception e) throws Exception {
ResponseEntity<OAuth2Exception> responseEntity = super.translate(e);
OAuth2Exception body = responseEntity.getBody();
HttpHeaders headers = new HttpHeaders();
headers.setAll(responseEntity.getHeaders().toSingleValueMap());
// do something with header or response
return new ResponseEntity<>(body, headers, responseEntity.getStatusCode());
}
};
}
@Configuration
@EnableAuthorizationServer
public class OAuth2ServerConfiguration extends AuthorizationServerConfigurerAdapter {
// some config
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
.pathMapping("/oauth/authorize", "/authorize")
.pathMapping("/oauth/error", "/error")
.exceptionTranslator(webResponseExceptionTranslator())
;
}
}