手把手教你可复用的SSO组件设计(设计篇)

周末陪女朋友去了,没写,告罪,上班后急忙补上。

这里说到了可复用得设计,所谓可复用就是指的,引入Dll,改改配置就能使用,而不是打开源代码东改改西改改再来调试调试最后OK。我们这里尽量提高抽象层次减少系统耦合。

首先系统需要一个中心认证端,多个客户端构成。所以需要一个SSO的模块和一个PSO的模块,这两个模块都由工具类和HttpModule组成

image%7B0%7D_thumb.png

image%7B0%7D%5B3%5D.png

这里SSO的Keeper类和PSO的PSOClient类都是HttpModule。

Keeper在配置中设置一个URL,它只监听对这个URL的请求,就是用来处理PSO向SSO端查询SSOToken是否存在的请求的。它包含了SSO端的逻辑

PSOClient在配置中设置一个例外列表,它监听例外列表外的所有请求,判断是否有PSOToken,或者URL里是否包含SSOToken,它包括了整个PSO端的逻辑

TicketCreator是一个工具类,用于用户登录成功后调用来产生SSOToken的。

这两个组件包括了所有的逻辑,但是有一些公共的东西我们需要抽象出来(不然就成了意大利面条式的代码了:})

image%7B0%7D%5B5%5D.png

这个项目封装了整个3DES加密解密,密钥生成的逻辑,.NET的加密解密名字空间里的类用法很恶心,太恶心了。

Encrypter加密,Decrypter解密,KeyMaker密钥生成,Common是公共的字符串操作类

image%7B0%7D%5B7%5D.png

这个项目包含了所有公共数据结构和操作的基本逻辑还有密钥的获取更新的功能,为了摆脱对数据库的依赖,这里我们使用了文件的方式,其实老实说效率不会低。

KeyManager是密钥管理的操作的类

PSORequest是PSO向SSO发送的SSOToken查询请求的结构及其操作的类

SSOResponse是SSO验证登陆成功后向PSO发送的包含SSOToken的请求的结构及其操作的类

Ticket是操作Cookie票据的类

 

实用的方法:

引入DLL到SSO站点

image%7B0%7D%5B11%5D.png

修改Web.Config

image%7B0%7D_thumb%5B7%5D.png

添加自定义配置和加载HttpModule的模块

这样子SSO站点就配置好了

引入DLL到PSO站点

image%7B0%7D%5B19%5D.png

修改Web.Config

image%7B0%7D_thumb%5B6%5D.png

添加自定义配置和加载HttpModule的模块

ok

现在用KeyManager生成一个Key和IV的文件,之后就可以使用了

看看,是不是一句代码都没改,也不用重新编译阿:}

 

下一章放出主要代码和说明

 

To be continue......

转载于:https://www.cnblogs.com/Alexander-Lee/archive/2007/01/29/633595.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Object类和常用的API

第一章Object类 1.1 概述 1),Object 类是Java语言所有“引用类型”的父类,括我们自定义的类、类库中的类,数组,集合,字符串。 2),所有的的引用类型都从Object类继承了一些方法: 如,1).toString() 2).equal…

前端能力划分

前端学习学的是什么,在不同的阶段我思考这个问题。 最近的结论是:前端学习要学的是前端的三大能力。工程能力,架构能力,开发能力。 工程能力 工程能力的范畴我认为涵盖了项目模板的自动化生成、项目的自动化编译和构建。 当然传统…

英语学习网址

英文写作网 ( www.4ewriting.com )提供英文写作的各种相关技巧,主要内容包括写作语法文法、应用写作、考试作文、写作范文、背景文化 佳作欣赏、原创发表、英文blog、英语笔友、名师指导、写作论坛等。 1. 英语学习:英语学习频道(…

Anaconda+vscode+pytorch环境搭建

1、安装Anaconda Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。在官网上下载https://www.anaconda.com/distribution/,因为服务器在国外会很慢,建议从清华镜像https://mirrors.tuna.tsinghua.ed…

git learn

$ git config --global user.name "Your Name" $ git config --global user.email "emailexample.com"因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人…

C#.NET 中的类型转换

C# 出来也有些日子了,最近由于编程的需要,对 C# 的类型转换做了一些研究,其内容涉及 C# 的装箱/拆箱/别名、数值类型间相互转换、字符的 ASCII 码和 Unicode 码、数值字符串和数值之间的转换、字符串和字符数组/字节数组之间的转换、各种数值…

AngularJS的学习--$on、$emit和$broadcast的使用

来源:http://www.cnblogs.com/CraryPrimitiveMan/p/3679552.html AngularJS中的作用域有一个非常有层次和嵌套分明的结构。其中它们都有一个主要的$rootScope(也就说对应的Angular应用或者ng-app),然后其他所有的作用域部分都是继承自这个$rootScope的&a…

17、【 商品管理模块开发】——后台商品图片的springmvc和富文本上传以及ftp文件服务器的开发...

1、FTP文件服务器的搭建: 软件下载:ftpserver; image.png浏览器访问:ftp://127.0.0.1/image.png点击任意一个文件,就可以看到我们图片啦,前提是前面指定的目录里面有图片文件~ image.png2、接口编写&#x…

我们常说……

从过完元旦到现在,乖乖在公司办公的时间很少,好多时候都是在外地,或者是在路上、车上。有n多次,乖乖一天至少坐6个小时的车,回到家里都是带着一身的疲惫,虽然他并不表现出来,但是因为长时间坐车…

那些油管上高质量的学习编程的频道 之一

国内确实有很多不错的学习编程的网站或者个人博客,但是对于初学者,往往更希望获得那种引导性的教学:即一步一步的教你跟着操作的教学。这种教学最好的方式当然就是视频了。毕竟在Apple Podcast上超火爆的斯坦福教授iOS开发的课程也是这种形式…

SQL Server 2005 Express附加(Attach)的数据库为“只读”的解决方法

我的操作系统为Windows 2003 Server , 文件系统NTFS, 在SQL Server 2005 Express 上附加(Attach)从另外一台电脑Copy过来的数据库后,数据库为“只读”。如下图: 解决办法: 打开 SQL Server Configuration Manager, 打开SQL Server SQLEXPRESS…

[导入]blog年终小结

1. 2006-11-30 注册了本域名thws.cn,喜欢的thw.com被注册了,只好退而就其次了;2. 12-20在alexa上登陆站点,综合排名从起初490多万上升到现在的590327,下期566,880;3. 2007-1-11适逢google PR更新,PR值从0变…

Maven学习笔记(2) --mvn archetype:create 说明

前面一篇相对比较简单。 看完前面的内容我们会来到实战部分,也就是创建一个简单的项目 1 mvn archetype:create -DgroupIdorg.sonatype.mavenbook.ch03 \ 2 -DartifactIdsimple \ 3 -DpackageNameorg.sonatype.mavenbook 于是我们得到了步入Maven领域的第一份打击 真…

UI设计:C4D作品案例分享

中文名4D电影,外文名CINEMA 4D,研发公司为德国Maxon Computer,特点为极高的运算速度和强大的渲染插件,使用在电影《毁灭战士》、《阿凡达》中,获得贸易展中最佳产品’的称号,前身为FastRay。CINEMA 4D拥有快…

又是一个人的情人节

又是一个人的情人节 上午送完弟弟返乡的车,回家的心情也越来越迫切,很想立刻回到家里,和老爸老妈唠叨唠叨,和一年未见的堂兄弟一起喝喝酒,玩耍玩耍,那种心情真是没有办法形容,在我个人看来&…

C# Global.asax.cs 定时任务

定时执行更新Redis缓存操作 protected void Application_Start(object sender, EventArgs e) {Timer timer new Timer();timer.Enabled true;timer.Interval 3600000; //执行间隔时间,单位为毫秒; 这里实际间隔为1小时 timer.Start();timer.Elapsed new System.Timers.Ela…

给div拼接html 拼接字符串

简单描述:拼接html 拼接字符串,说实话,拼接这种东西我自己弄,得花费很多时间,主要是转义字符,单引号,双引号这种小细节调整起来比较麻烦,一旦疏忽多了少了一个符号,页面就…

P2587 [ZJOI2008]泡泡堂 神仙贪心

思路:贪心 提交:1次(看了题解$QwQ$) 题解: 若我方最弱可以干掉对方最弱,则干; 否则若我方最强可以干掉对方最强,则干; 否则若我方最弱与对方最强平手,则平&am…

LifeCycle源码解读

对于LifeCycle的简单使用可以看上一篇文章:LiveDataViewModelRepository搭建MVVM 这篇文章主要是为了阅读源码,尽量深入阅读,能力还是一般,见谅: LifeCycle的作用 解决onCreate等生命周期方法,由于各种原因…

Microsoft SQL Server 2005 Service Pack 2 已经可以下载

下载地址为http://www.microsoft.com/downloads/details.aspx?FamilyIDd07219b2-1e23-49c8-8f0c-63fa18f26d3a&DisplayLangzh-cn嘿嘿,这么快就SP2了 转载于:https://www.cnblogs.com/lazerjulysky/archive/2007/03/04/663279.html