您当前的位置:首页 > 互联网教程

如何用JavaScriptSerializer

发布时间:2025-05-20 18:16:26    发布人:远客网络

如何用JavaScriptSerializer

一、如何用JavaScriptSerializer

JavaScriptSerializer类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web服务器之间传递的数据。您无法访问序列化程序的此实例。但是,此类公开了公共 API。因此,当您希望在托管代码中使用 JavaScript对象符号(JSON)时可以使用此类。

若要序列化对象,请使用 Serialize方法。若要反序列化 JSON字符串,请使用 Deserialize或 DeserializeObject方法。若要序列化和反序列化 JavaScriptSerializer本身不支持的类型,请使用 JavaScriptConverter类来实现自定义转换器。然后,使用 RegisterConverters方法注册转换器。

下表显示序列化进程中托管类型和 JSON之间的映射。JavaScriptSerializer本身支持这些托管类型。将 JSON字符串反序列化为托管类型时,采用相同的映射。但是,反序列化可能是非对称的,并非所有可序列化的托管类型都可以从 JSON反序列化得到。

通过JavaScriptSerializer来实现。它的名字空间为:System.Web.Script.Serialization

System.Web.Extensions库文件引用

public string CustomerName{ get; set;}

类JavaScriptSerializer描述:为启用 AFAX的应用程序提供序列化和反序列化功能。

方法:public string Serialize(Object obj),用于将对象转换为 JSON字符串

public string ScriptSerialize(Customer customer)

JavaScriptSerializer js= new JavaScriptSerializer();

return js.Serialize(customer);

Customer cc= new Customer{ Unid= 1, CustomerName="John"};

string strJson= ScriptSerialize(cc);

public Customer ScriptDeserialize(string strJson)

JavaScriptSerializer js= new JavaScriptSerializer();

return js.Deserialize<Customer>(strJson);

通过Deserialize<T>方法来实现。

Customer c1= ScriptDeserialize(strJson);

Console.WriteLine(c1.Unid+""+ c1.Custome

二、在Express中如何使用cookie-parser中间件

本篇文章主要介绍了深入剖析Express cookie-parser中间件实现示例,现在分享给大家,也给大家做个参考。

文章导读cookie-parser是Express的中间件,用来实现cookie的解析,是官方脚手架内置的中间件之一。

它的使用非常简单,但在使用过程中偶尔也会遇到问题。一般都是因为对 Express+ cookie-parser的签名、验证机制不了解导致的。

本文深入讲解 Express+ cookie-parser的签名和验证的实现机制,以及cookie签名是如何增强网站的安全性的。

文本同步收录于GitHub主题系列《Nodejs学习笔记》

入门例子:cookie设置与解析先从最简单的例子来看下 cookie-parser的使用,这里采用默认配置。

cookie设置:使用 Express的内置方法 res.cookie()。

cookie解析:使用 cookie-parser中间件。

var express= require('express');

var cookieParser= require('cookie-parser');

app.use(function(req, res, next){

console.log(req.cookies.nick);//第二次访问,输出chyingp

app.use(function(req, res, next){

res.cookie('nick','chyingp');

app.listen(3000);在当前场景下, cookie-parser中间件大致实现如下:

app.use(function(req, res, next){

req.cookies= cookie.parse(req.headers.cookie);

});进阶例子:cookie签名与解析出于安全的考虑,我们通常需要对cookie进行签名。

cookieParser初始化时,传入 secret作为签名的秘钥。

设置cookie时,将 signed设置为 true,表示对即将设置的cookie进行签名。

获取cookie时,可以通过 req.cookies,也可以通过 req.signedCookies获取。

var express= require('express');

var cookieParser= require('cookie-parser');

//初始化中间件,传入的第一个参数为singed secret

app.use(cookieParser('secret'));

app.use(function(req, res, next){

console.log(req.cookies.nick);// chyingp

console.log(req.signedCookies.nick);// chyingp

app.use(function(req, res, next){

//传入第三个参数{signed: true},表示要对cookie进行摘要计算

res.cookie('nick','chyingp',{signed: true});

app.listen(3000);签名前的cookie值为 chyingp,签名后的cookie值为 s%3Achyingp.uVofnk6k%2B9mHQpdPlQeOfjM8B5oa6mppny9d%2BmG9rD0,decode后为 s:chyingp.uVofnk6k+9mHQpdPlQeOfjM8B5oa6mppny9d+mG9rD0。

下面就来分析下,cookie的签名、解析是如何实现的。

cookie签名、验证实现剖析Express完成cookie值的签名, cookie-parser实现签名cookie的解析。两者共用同一个秘钥。

Express对cookie的设置(包括签名),都是通过 res.cookie()这个方法实现的。

res.cookie= function(name, value, options){

//如果 options.signed为true,则对cookie进行签名

val='s:'+ sign(val, secret);

this.append('Set-Cookie', cookie.serialize(name, String(val), opts));

};sign为签名函数。伪代码如下,其实就是把cookie的原始值,跟hmac后的值拼接起来。

敲黑板划重点:签名后的cookie值,包含了原始值。

return val+'.'+ hmac(val, secret);

}这里的 secret哪来的呢?是 cookie-parser初始化的时候传入的。如下伪代码所示:

var cookieParser= function(secret){

return function(req, res, next){

app.use(cookieParser('secret'));签名cookie解析

知道了cookie签名的机制后,如何"解析"签名cookie就很清楚了。这个阶段,中间件主要做了两件事:

将签名cookie对应的原始值提取出来

// str:签名后的cookie,比如"s:chyingp.uVofnk6k+9mHQpdPlQeOfjM8B5oa6mppny9d+mG9rD0"

function signedCookie(str, secret){

//检查是否 s:开头,确保只对签过名的cookie进行解析

if(str.substr(0, 2)!=='s:'){

//校验签名的值是否合法,如合法,返回true,否则,返回false

var val= unsign(str.slice(2), secret);

}判断、提取cookie原始值比较简单。只是是 unsign方法名比较有迷惑性。

一般只会对签名进行合法校验,并没有所谓的反签名。

首先,从传入的cookie值中,分别提取出原始值A1、签名值B1。

其次,用同样的秘钥对A1进行签名,得到A2。

最后,根据A2、B1是否相等,判断签名是否合法。

exports.unsign= function(val, secret){

var str= val.slice(0, val.lastIndexOf('.'))

, mac= exports.sign(str, secret);

return sha1(mac)== sha1(val)? str: false;

};cookie签名的作用主要是出于安全考虑,防止cookie被篡改,增强安全性。

举个小例子来看下cookie签名是如何实现防篡改的。

基于前面的例子展开。假设网站通过 nick这个cookie来区分当前登录的用户是谁。在前面例子中,登录用户的cookie中,nick对应的值如下:(decode后的)

s:chyingp.uVofnk6k+9mHQpdPlQeOfjM8B5oa6mppny9d+mG9rD0

此时,有人试图修改这个cookie值,来达到伪造身份的目的。比如修改成 xiaoming:

s:xiaoming.uVofnk6k+9mHQpdPlQeOfjM8B5oa6mppny9d+mG9rD0

当网站收到请求,对签名cookie进行解析,发现签名验证不通过。由此可判断,cookie是伪造的。

hmac("xiaoming","secret")!=="uVofnk6k+9mHQpdPlQeOfjM8B5oa6mppny9d+mG9rD0"

签名就一定能够确保安全吗当然不是。

上个小节的例子,仅通过 nick这个cookie的值来判断登录的是哪个用户,这是一个非常糟糕的设计。虽然在秘钥未知的情况下,很难伪造签名cookie。但用户名相同的情况下,签名也是相同的。这种情况下,其实是很容易伪造的。

上面是我整理给大家的,希望今后会对大家有帮助。

使用原生JavaScript实现放大镜效果

三、java培训主要学什么

像这样的问题,我已经回答了很多次,现在很多新手,特别是刚刚入行想学java的同学,不知道该从哪里入手,我是在成都课工场学java入的行,现在已变成老司机,我整理了一些java的知识点,一共分为六个阶段,273个技能点,第一阶段、第二阶段、第三阶段、第四阶段是必须要掌握的,很多机构忽悠人,就只学到第四阶段,第五阶段和第六阶段就是高薪、高职的保障,就说说想高薪必须得把后面两个阶段的给掌握了,老铁,觉得合适采纳下啊。

31.Collections算法类及常用方法

34.String、StringBuffer类常用方法操作字符串

38.字节输入流(InputStream、FileInputStream、BufferedInputStream)

39.字节输出流(OutputStream、FileOutputStream、BufferedOutputStream)

40.字符输入流(Reader、InputStreamReader、FileReader BufferedReader)

41.字节输出流(Writer、OutputStreamWriter、FileWriter、BufferedWriter)

44.职场晋升力:四象限时间管理与精力管理

54.使用DOM读取、添加、删除、解析 XML数据

62.项目实战-银行ATM存取款机系统

85.Commons-fileupload、CKEditor

92.项目实战—使用Ajax技术改进新闻发布系统

97.在Linux服务器环境下安装软件和部署项目

105. Spring整合MyBatis(SqlSessionTemplate、MapperFactoryBean、事务

106. Spring数据源(属性文件、JNDI)、Bean作用域

109.SpringMVC之数据绑定、数据效验、

111.SpringMVC之文件上传、本地化解析

112.SpringMVC之静态资源处理、请求拦截器、异常处理

113.Oracle数据库环境搭建、安装

114.Oracle数据库 SQL、分页、备份、还原

118.HQL连接查询与 Hibernate注解

132.企业框架项目实战-代理商管理系统

133.企业框架项目实战-SL会员商城

134.企业框架项目实战-会员管理系统

135.企业框架项目实战-互联网招聘信息采集分析平台

137.Git基础(checkout、pull、commit、push、merge等)

141.Maven介绍(概念、仓库、构建、命令)

145.Scrum框架介绍(三个角色、三个工件、四个会议)

149.使用敏捷-Scrum方式开发管理实战

150.前后端分离、分布式集群架构、垂直架构

151.SSM(SpringMVC+Spring+MyBatis)整合实战

153.第三方接入技术(微信、阿里)

158.图片自动化处理:Tengine+LUA+GraphicsMagic

162.Jsoup网络爬虫(多线程爬虫/代理 IP爬虫)

170.大型互联网旅游电商项目实战-爱旅行

188.真实互联网高并发电商项目实战-双十一抢购

213.Elasticsearch查询/复合查询

214.Elasticsearch集群/集群规划

238.SpringBoot改造爱旅行项目实战

239.大型互联网票务类电商项目实战-大觅网

248.VUE项目环境配置及单文件组件

253. Eureka、Consu、lNacos、Zookeeper对比分析

256. NoSQL数据库解决方案(Redis、MongoDB)

257. OAuth2.0认证( authorization code模式)

258. OAuth2.0认证( implicit模式)

259. OAuth2.0认证( resource owner password credentials模式)

260.OAuth2.0认证( clientcredentials模式)

我估计能把你看晕,有不清楚的可以私信我