使用js 文件参数 以及IHttpModule实现服务验证asp.net 版的初步实现
接上面的文章,上面的主要是进行html 页面自己进行处理。但是对于进行asp.net 的开发者以及其他的就显的不太好了。
我的实现方式是使用IHttpModule 进行对于用户请求的带有参数的js文件,进行处理 ,主要是获取参数,当然在其中进行一些处理可以制作一个SSO的应用,
如果需要处理的高速,可以使用缓存,我个人的建议是不要使用asp.net 自带的缓存,而是使用一些开源的缓存,不如memcached windows平台也是可以使用的,
代码如下:
1,设计自定义的IHttpModule。
public class Myhttpmodel:IHttpModule {
public void Dispose() {}
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
}
void context_AcquireRequestState(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
string tep = context.Request.RawUrl;
if (tep.Contains(".js?"))
{
context.Application["demo"] = tep;
context.Response.Write("<script>alert(" + tep + ")</script>");
}
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
string tep = context.Request.RawUrl;
if (tep.Contains(".js?"))
{
context.Application["demo"] = tep;
}
}
}
代码比较简单就是对于用户请求我们的带有参数js文件进行获取参数值,之后存储在application中进行处理。
IHttpModule 设计完成之后就是进行web config 配置文件的处理,也是比较简单的。
如下:
<httpModules>
<add type="demodlaong.Myhttpmodel" name="HttpModule"/>
</httpModules>
这样每次有请求的时候我们的模块就可以工作了。
2,客户端的js 应用的代码:
<script type="text/javascript" src="http://localhost:3243/Scripts/jquery-1.4.1.js?username=jack&id=8&uid=258" ></script>
也很简单就是加上我们的服务器地址。
3,一个我自己的服务器的测试.
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = Application["demo"].ToString();
}
public dynamic setthing()
{
string tep = Application["demo"].ToString();
string userinfo = tep.Split('?')[1];
dynamic user = new ExpandoObject();
string tep1= userinfo.Replace('=', ':');
string[] list=tep1.Split('&');
var tep2=list[0].Split(':');
var tep3=list[1].Split(':');
var tep4=list[2].Split(':');
user.username=tep2[1].ToString();
user.id = tep3[1].ToString();
user.uid = tep4[1].ToString();
return user;
}
protected void Button2_Click(object sender, EventArgs e)
{
Label2.Text = setthing().username;
}
代码比较简单就是获取application中存储的信息 ,我使用的是.net 4.0 的dynamic 主要是进行测试,实际自选。
服务器测试截图:

4,客户端进行请求之后的调试界面。

一些红色的是自己测试使用的是文件夹中不存在的东西所以是这样的,
服务器端的调试界面。

以上只是自己的一些实践,代码比较简单。对于进行其他编程环境的使用也是类似的,如果在其中使用一些ajax jsonp 跨域技术 就可以实现我们的基于js的SSO了,如果感觉性能不太好 ,可以添加缓存 使用 memcached 、redis等。
如果有些人就是比较喜欢使用javascript 进行开发,并且对于服务器感觉搭建比较麻烦的,可以使用nodejs 简单又好用,熟悉的编程方式,不会为开发者添加太多约束。
使用js 文件参数 以及IHttpModule实现服务验证asp.net 版的初步实现的更多相关文章
- 使用rewrite 让php 实现类似asp.net 的IHttpModule 进行带参数js文件的参数获取
asp.net 的IHttpModule 接口具有很大的作用,我们可以使用实现的模块进行全局的控制,但是在学习php 的过程中也想实现类似的功能,查找php 的文档,自己没有找到, 但是我们大家应该知 ...
- 异步加载js文件的方法
# 异步加载js文件 - js的加载默认是同步的,因为js是单线程执行,只能完成一件再执行下一件. - 一些外部引入的js文件可以因为文件太大,在加载资源的过程中会影响dom元素的加载,影响了用户体验 ...
- 在引入的css或者js文件后面加参数的作用
有时候可能会遇到js或者css文件引用后传递参数: css和js带参数(形如.css?v=与.js?v=) <script type=”text/javascript” src=”jb51.js ...
- coding++ :在引入的css或者js文件后面加参数的作用
前沿: 有些小伙伴们在页面(F12)直接对 JS.CSS 文件进行编辑.或者打断点调试的时候 可能会发现 所有的操作都不生效,为什么? 原因可能存在以下情况 有时候可能会遇到js或者css文件引用后传 ...
- 利用WebClient上传参数及文件流到远程ashx服务
原文 利用WebClient上传参数及文件流到远程ashx服务 1 思路: WebClient.UploadFile()方法可以上传文件:UploadData()方法可以上传数据参数:如何合二为一既上 ...
- nodejs 使用express开发获取其他网站引用本站点js文件的参数
nodejs进行站点的开发其性能是很好的,在js 大行其道的天下,使用js基本上可以干好多只要我们能想到的东西,我们可以使用js文件进行用户验证等等. 这次我们就使用express 进行获取其他站点引 ...
- 引入其他服务的JS、和 本地的JS文件,script的属性
==============使用其他服务器引入JS文件,1,减轻服务器压力2,速度快3,可以缓存 cdnjs库,更新比较快https://cdnjs.com/ cdn库 引入JS文件如:jqueryb ...
- 关于更新发布CSS和JS文件的缓存问题
现如今,浏览器大战下,各个浏览器也是拼了命的提高性能,升级JS解析引擎,更好的处理浏览器的页面缓存,让用户的浏览体验更快,占用更小的PC资源.那么,问题就出现在JS和CSS缓存,甚至页面缓存上.至于浏 ...
- 使用Node.JS访问Hyperledger Fabric的gRPC服务
在即将正式发布的Hyperledger Fabric SDK 1.0中,Hyperledger Fabric通过gRPC提供服务接口以取代现有的REST API.本文介绍了如何使用Node.JS访问H ...
随机推荐
- sgu 116 Index of super-prime
题意:用最少的super-prime组成n; 找出所有的super-prime数,只有202个.用完全背包记录能取到n值的最少数量.再找出7要哪些元素. #include <iostream&g ...
- python-day30--粘包
一. 什么是粘包 1.须知:只有TCP有粘包现象,UDP永远不会粘包 2.所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的. 二.两种情况下会发生粘包. 1. ...
- ubuntu修改root密码
1.我们在安装系统的时候我们会把系统的密码设置的比较简单,所以导致后面我们别人很容易操作我们的电脑.所以,我们就可以修改密码,你只要在系统上输入: sudo passwd root
- 牛客练习赛22-C-dp+bitset
链接:https://www.nowcoder.com/acm/contest/132/C来源:牛客网 题目描述 一共有 n个数,第 i 个数是 xi xi 可以取 [li , ri] 中任意的一个 ...
- Error Code: 1175. You are using safe update mode and you tried to ......
MySQL提示的错误信息: Error Code: 1175. You are using safe update mode and you tried to update a table witho ...
- iOS开发-开发文档安装
iOS开发肯定离不开开发文档,苹果有在线帮助文档,xCode其实可以下载模拟器文档和iOS8.1文档的,不过下载的速度实在不敢恭维,而且比较头疼的是不显示下载进度条的,苹果的开发文档都是放在)/应用程 ...
- Android轮播图Banner的实现
从慕课网上学了一门叫做“不一样的自定义实现轮播图效果”的课程,感觉实用性较强,而且循序渐进,很适合初学者.在此对该课程做一个小小的笔记. 实现轮播思路: 1.一般轮播图是由一组图片和底部轮播圆点组成, ...
- 1.2 C++命名空间(namespace)
参考:http://www.weixueyuan.net/view/6326.html 总结: C++语言引入命名空间(Namespace)这一概念主要是为了避免命名冲突,其关键字为 namespac ...
- Objective-C 类别(category)和扩展(Extension)
1.类别(category) 使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以 ...
- maven多环境配置
我们在开发项目的时候,往往会有好几个环境.比如开发.预发布(测试).产品,每个环境一般用到配置都不一样,最典型的就是数据库,开发的数据库与产品的数据库肯定是不一样的,如果要多个环境的切换就得改配置,这 ...