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申请方式:
再提供一个javax.ws.rs实现接口的webserver获得header的代码
最后,如果你的前端是用easyui,在datagrid和treegrid加载的时候无法设置header的头信息。可以通过修改easyui的源码来解决。我的版本是1.3.1
datagrid的源码修改,行数为9988
treegrid的源码修改,行数为11471
使用的时候只需要在实例化datagrid和treegrid的构造函数中设置header属性即可,比如:header:[{key:'Authorization',value:token}]
在客户端登陆时生成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}]
相关文章推荐
- 支持HTTP验证的BOA源码0.94.14rc21
- 支持HTTP验证的BOA源码0.94.14rc21 (转载)
- 《pro Spring》学习笔记之Spring HTTP 远程方法调用集成Tomcat实现安全验证
- 2008年3月小记(设置Windows服务的依赖关系,配置MSMQ的访问权限,WCF的安全配置,删除重建网站,HttpWebRequest,一年中的周,在WCF中使用HttpContext,String.Join)
- WCF分布式安全开发实践(6):传输安全模式之自定义X509Certificate证书验证:Transport_X509Certificate_WSHttpBinding
- WCF分布式安全开发实践(12):消息安全模式之自定义X509证书验证:Message_CustomX509Certificate_WSHttpBinding
- WCF分布式安全开发实践(11):消息安全模式之Certificate身份验证:Message_Certificate_WSHttpBinding
- response.setHeader()方法设置http文件头的值
- 学习笔记之 WCF安全(6) 数字证书 自定义证书验证+ 客户端 证书验证(wshttpBinding)
- WCF分布式安全开发实践(5):传输安全模式之Certificate身份验证:Transport_Certificate_WSHttpBinding
- 开启Java对代理服务器和HTTP验证的支持
- 学习笔记之 WCF安全(3) 数字证书+ 自定义验证(wshttpBinding)
- 2008年3月小记(设置Windows服务的依赖关系,配置MSMQ的访问权限,WCF的安全配置,删除重建网站,HttpWebRequest,一年中的周,在WCF中使用HttpContext,String.Join)
- J2EE安全之Http基本验证
- .NET 自动垃圾管理(垃圾收集)、安全类型验证、丰富的调试支持、一致的方法出错行为、安全性、互操作性
- WCF分布式安全开发实践(5):传输安全模式之Certificate身份验证:Transport_Certificate_WSHttpBinding
- 支持FAT32和NTFS的引导扇区源码http://www.x86asm.com/DisplayArticle.asp?BoardID=4&ArticleID=148
- http://www.xici.net/b928215/d66204632.htm 最新服务器安全设置技术实例
- 动手改造Ibatis,使其支持文件系统存储数据列 之 源码下载编译和SqlMapConfig解析
- WCF分布式安全开发实践(8):消息安全模式之用户名身份验证:Message_UserName_WSHttpBinding