welcome to xlongwei.com

欢迎大家一起学习、交流、分享


QQ:9167702333 邮箱:admin@xlongwei.com

ServiceController 支持访问权限控制


分类 Java   关键字 分享   标签 java   algorithm   redis   发布 hongwei  1463551704317
注意 转载须保留原文链接,译文链接,作者译者等信息。  
ServiceController用于提供简单的接口服务,访问控制的简单方案有:ip白名单,授权密钥等,密钥的位置包括:请求头、请求参数、请求正文、cookie等。

//允许ip白名单黑名单,允许临时密钥
String ip = RequestUtil.getIp(request), configKey = "service.controller.ips.config";
String ipsConfig = CacheUtil.get("property", GlobalConfig.getProperty(configKey, configKey));//{blacks:,whites:,secrets:,showapis:,}
JSONObject json = getJson(ipsConfig); boolean configLegal = false; String secrets = secret;
if(json != null) {
if(StringUtil.splitContains(json.getString("blacks"), ip)) return isXml ? BadRequestXML : BadRequest;
if(StringUtil.splitContains(json.getString("whites"), ip)) configLegal = true;
if(!StringUtil.isBlank(json.getString("secrets"))) secrets += ","+json.getString("secrets");
if(StringUtil.splitContains(json.getString("showapis"), ip)) params.put("showapi", "true");
}

//检查加密授权
boolean legal = false;
if(NumberUtil.parseBoolean(GlobalConfig.getProperty("service.controller.auth"), true)==false) legal = true;
if(!legal && configLegal) legal = true; //ip白名单
if(!legal) {
String secret = params.get("secret");
if(StringUtil.isBlank(secret) && data!=null) secret = data.getString("secret");
if(StringUtil.isBlank(secret) && xml!=null) secret = xml.get("secret");
if(StringUtil.isBlank(secret)) secret = request.getHeader("secret");
if(StringUtil.isBlank(secret)) secret = CookieUtil.getCookieValue(request, "secret");
legal = StringUtil.splitContains(secrets, secret); //授权密钥
}
if(!legal) {
Object obj = isXml ? BadRequestXML : BadRequest;
logger.info("result: "+obj.toString());
return responseWithAccessAllowed(obj);
}