Rest数据源鉴权扩展
在Rest数据源中,如果请求的接口需要鉴权处理,可已通过实现预留的抽象方法进行鉴权处理。
1.1 基础接口说明
接口名称:com.neusoft.saca.dataviz.dataquery.execute.impl.other.validate.PreParamHandler 所在jar包:dataviz-lib-query.jar
1.2 process方法
只需要实现PreParamHandler中process抽象方法即可。在方法中需要获取授权,并把授权信息放到对应的参数中,这样在请求Rest接口时就会携带授权信息。
/**
* 参数处理
*
* @param query query参数
* @param header header参数
* @param body body参数
*/
public abstract void process(Map<String, String> query, Map<String, String> header, String body);
1.2.1 传入参数说明
query、header和body分别为请求接口中的3种参数。
1.2.2 示例代码
public class OauthAuthorizeHandler extends PreParamHandler {
private static Logger logger = LoggerFactory.getLogger(OauthAuthorizeHandler.class);
private OAuthAuthorize oauthAuthorize;
@Override
public void process(Map<String, String> query, Map<String, String> header, String body) {
String authorizeUrl = this.getUrl();
String clientId = this.getId();
String clientSecret = this.getSecret();
if (this.oauthAuthorize == null) {
// 授权信息为空,请求授权
this.oauthAuthorize = this.getOAuthAuthorize(authorizeUrl, clientId, clientSecret);
} else {
// 授权过期,刷新授权或重新申请授权
if ((new Date()).getTime() - oauthAuthorize.getGrantTime().getTime() > oauthAuthorize.getExpiresIn()
* 1000) {
if (StringUtils.isEmpty(oauthAuthorize.getRefreshToken())) {// 刷新秘钥为空,重新请求授权
this.oauthAuthorize = this.getOAuthAuthorize(authorizeUrl, clientId, clientSecret);
} else {
// 使用刷新秘钥刷新授权
this.oauthAuthorize =
refreshOAuthAuthorize(authorizeUrl, clientId, clientSecret, oauthAuthorize.getRefreshToken());
}
}
}
header.put("Authorization",
this.oauthAuthorize.getTokenType() + " " + this.oauthAuthorize.getAccessToken());
}
}
  在Rest数据源设置页面中,如果在“认证请求地址”、“ID”、“Secret”中填入了对应的内容,可以使用如下代码获取页面中填入的内容。
String url = this.getUrl(); String id = this.getId(); String secret = this.getSecret();
完成接口扩展后,需要在rest-pre-handler.yaml中添加对应配置,否则在页面中无法选择扩展的鉴权方式:
- id: oauth2.0
name: OAuth 2.0(标准)
className: com.neusoft.saca.dataviz.dataquery.execute.impl.other.validate.OauthAuthorizeHandler
1.3 配置说明
系统默认只有一个oauth2.0的鉴权,如果想要添加新的鉴权方式要修改配置文件dataviz-service\WEB-INF\conf\rest-pre-handler.yaml,按照如下格式添加即可。
- id: 鉴权编码
name: 鉴权名称
className: 扩展的鉴权类名
1.4 使用说明
在Rest数据源设置页面,选择启用请求鉴权,并选择鉴权方式,然后在“认证请求地址”、“ID”、“Secret”中填入鉴权需要的信息即可。