小编Joh*_*hnD的帖子

如何在TokenEndPoint Spring oAuth2中注入WebResponseExceptionTranslator

我试图自定义Spring Security oAuth TokenEndpoint类处理异常的方式.我想返回一个比DefaultWebResponseExceptionTranslator当前更自定义的JSON响应.我无法弄清楚如何通过XML注入自定义转换器.这是我的代码片段:

弹簧security.xml文件

<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>
Run Code Online (Sandbox Code Playgroud)

这是AbstractServerBeanDefinitionParser的相关代码部分

    BeanDefinitionBuilder tokenEndpointBean = BeanDefinitionBuilder.rootBeanDefinition(TokenEndpoint.class);
    tokenEndpointBean.addPropertyReference("clientDetailsService", clientDetailsRef);
    tokenEndpointBean.addPropertyReference("tokenGranter", tokenGranterRef);
    authorizationEndpointBean.addPropertyReference("oAuth2RequestValidator", oAuth2RequestValidatorRef);
    parserContext.getRegistry()
            .registerBeanDefinition("oauth2TokenEndpoint", tokenEndpointBean.getBeanDefinition());
    if (StringUtils.hasText(oAuth2RequestFactoryRef)) {
        tokenEndpointBean.addPropertyReference("oAuth2RequestFactory", oAuth2RequestFactoryRef);
    }
    if (StringUtils.hasText(oAuth2RequestValidatorRef)) {
        tokenEndpointBean.addPropertyReference("oAuth2RequestValidator", oAuth2RequestValidatorRef);
    }
Run Code Online (Sandbox Code Playgroud)

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);
    }
Run Code Online (Sandbox Code Playgroud)

这是来自AbtractEndpoint的片段

public class AbstractEndpoint implements InitializingBean {

   protected final …
Run Code Online (Sandbox Code Playgroud)

java spring spring-security oauth-2.0 spring-security-oauth2

2
推荐指数
1
解决办法
3162
查看次数