您的位置:首页 > 理论基础 > 计算机网络

webserver的安全验证+easyui-datagrid-treegrid源码改造支持httpheader设置

2016-09-29 09:50 375 查看
       这里的安全验证为比较简单的令牌验证。

       在客户端登陆时生成token,token的值为用户名+暗文密码+随机8位字符串的Base64编码,在mvc模块中调用webserver的时候在header中增加Authorization,值为“Basic ”+token。

       在webserver端获取header的Authorization值,解码Base64,提取用户名,密码。

       1、缓存中存在该用户,比较令牌是否一致,不一致则从数据库验证,如果通过表示在不同的地方登陆。一致则验证通过。

       2、缓存中不存在该用户,从数据库验证,如果验证通过表示,返回登陆成功。将用户名和令牌存入缓存。

       在验证完成后,将相应信息返回mvc模块,如果登陆成功,则将令牌绑定到session。在session销毁的时候,清空令牌,同时调用webserver端清空缓存的令牌。

       这里提供一个Apache客户端的get申请方式:

      

public static String executeHttpGet(String url,String json,String token) throws Exception{
CloseableHttpClient httpclient=HttpClients.createDefault();
HttpGet httpget=new HttpGet(url+json);
httpget.addHeader("Authorization","Basic "+token);
CloseableHttpResponse response=httpclient.execute(httpget);
//parseResponse略
String rs=parseResponse(response);
return rs;
 }
注意:一定要加“Baseic ”这个是http协议约定的格式,否则会返回404

       再提供一个javax.ws.rs实现接口的webserver获得header的代码

@Context HttpHeaders httpHeader;

private Json auth() throws Exception{
...
String authCode=httpHeader.getRequestHeaders().get(HttpHeaders.AUTHORIZATION).get(0);
...
}


       最后,如果你的前端是用easyui,在datagrid和treegrid加载的时候无法设置header的头信息。可以通过修改easyui的源码来解决。我的版本是1.3.1

       datagrid的源码修改,行数为9988

if(opts.header){
$.ajax({
type : opts.method,
url : opts.url,
data : _5e7,
dataType : "json",
beforeSend : function(xhr){
for(var i;i<opts.header.length;i++){
             if(opts.header[i].key=="Authorization")
xhr.sendRequestHeader(opts.header[i].key,"Basic "+opts.header[i].value);
else
xhr.sendRequestHeader(opts.header[i].key,opts.header[i].value);
}
},
success : function(data){ _5e8(data); },
error : function(){
_5e9.apply(this, arguments);
}
});
}else{
$.ajax({
type : opts.method,
url : opts.url,
data : _5e7,
dataType : "json",
success : function(data){ _5e8(data); },
error : function(){
_5e9.apply(this, arguments);
}
});
}







          treegrid的源码修改,行数为11471
if(opts.header){
$.ajax({
type : opts.method,
url : opts.url,
data : _6f7,
dataType : "json",
beforeSend : function(xhr){
for(var i;i<opts.header.length;i++){
             if(opts.header[i].key=="Authorization")
xhr.sendRequestHeader(opts.header[i].key,"Basic "+opts.header[i].value);
else
xhr.sendRequestHeader(opts.header[i].key,opts.header[i].value);
}
},
success : function(data){ _6f8(data); },
error : function(){
_6f9.apply(this, arguments);
}
});
}else{
$.ajax({
type : opts.method,
url : opts.url,
data : _6f7,
dataType : "json",
success : function(data){ _6f8(data); },
error : function(){
_6f9.apply(this, arguments);
}
});
}






使用的时候只需要在实例化datagrid和treegrid的构造函数中设置header属性即可,比如:header:[{key:'Authorization',value:token}]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  安全验证
相关文章推荐