oauth2的封装实在Oauth2ResponseBodyAdvice 中进行的,直接指向controller完成之后调用该方法
package cc.vace.cloud.translator;
import cc.vace.cloud.constant.RpsBody;
import cc.vace.cloud.constant.VcResponse;
import com.alibaba.fastjson.JSON;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import java.util.Map;
@ControllerAdvice
public class Oauth2ResponseBodyAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports( MethodParameter methodParameter, Class aClass) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
System.out.println("请求返回数据类型class="+ body.getClass().getName());
if ( body.getClass().getName().equals("cc.vace.cloud.constant.VcResponse")) {
return body;
}else if (body instanceof OAuth2Authentication){
return body;
} else if ( body instanceof DefaultOAuth2AccessToken) {
RpsBody rpsBody = new RpsBody();
rpsBody.setCode("200");
rpsBody.setMessage("成功");
rpsBody.setData(body);
return VcResponse.save(rpsBody);
}else if (body instanceof Map) {
return body;
}else {
return body;
}
}
}