多 asp.net    统一访问授权管理中心系统可行性调研报告

现状: 用户一台服务器上有多个 ASP.NET 应用程序,每一个应用都有独自的访问权限管理模块,这些模块原理基本一样
目的:设计开发一个 “访问权限管理中心系统” ,能够管理所有ASP.NET 应用程序的访问权限,统一用户登录界面,用户登录成功后可访问已授权的全部ASP.NET 应用程序  (单点登录), 对现有的 ASP.NET 应用程序 ,尽量不修改源码
可行方案:

思路:
一个管理中心(asp.net)+ 多个拦截器(class)
管理中心使用  asp.net 自带的  membership  roleManager  profile 存放所有可登录用户 , 所有角色,用户角色关系,此功能可以模仿asp.net 网站管理工具(开源)实现,
管理中心可管理的ASP.NET 应用程序 从 web.config 中 取得
ASP.NET 应用程序的功能列表(功能ID  功能名称 RUL ) , 通过 各个 ASP.NET 应用程序 所提供的 WEBAPI (一个 URL) 获得的json 数据得到
角色和功能的对应关系存放于自建的数据表中
管理中心提供WEBAPI 供 拦截器调用, 获得访问用户的已授权功能 ,获得所有授权用户 , 等。
拦截器: 利用 IHttpModule 开发一个class ,编译成dll ,放入bin 文件夹中,通过web。config 添加到系统中 ,不修改原 ASP.NET 应用程序 代码
拦截器通过管理中心所提供的 webapi 获得访问用户是否拥有此访问页面的授权, 如果未授权,则终止访问
实现方法:

假设  权限管理系统命名为 mymag ,  2个 ASP.NET 应用程序命名为  asp1  asp2

1  访问权限管理中心系统:
asp.net 系统
统一用户登录界面
用户管理界面
角色管理界面

利用asp.net 自带的  membership  roleManager  profile  模块能够配置多应用适配器的功能很容易实现多应用程序的用户,角色,访问权限的分布存储和统一管理, 对 membership  roleManager  profile  不了解的读者请先查阅相关资料。
web config具体配置
membership  :

<membership>
            <providers>
                <clear/>
                <add applicationName="mymag" name="mymag" connectionStringName="DefaultConnection" type="System.Web.Security.SqlMembershipProvider"  enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" />
            </providers>
        </membership>
      
说明: membership 保存所有登录用户信息,所有只需要一个适配器,   applicationName 是访问权限管理中心名称  mymag,name 适配器名称, connectionStringName  数据库连接字符串名称

roleManager :
 <roleManager enabled="true" defaultProvider="mymag" >
          <providers>
              <clear/>
              <add name="mymag" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="mymag"/>
              <add name="asp1" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="asp1"/>
              <add name="asp2" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="asp2"/>

</providers>
      </roleManager>

说明:roleManager  用于保存多个asp.net应用程序各自的角色 ,所以需要多个适配器。 applicationName  分别对应 ASP.NET 应用程序名称 ,name 分别对应适配器名称,  connectionStringName  数据库连接字符串名称  因本管理系统数据都存放于一个数据库中,所以和 membership的connectionStringName  一一样。 当然也可以使用多个连接字符串将数据保存到不同数据库中,这也是 membership 系统强大之处。不过 放在一起也没问题,只要 applicationName 正确, 角色就不会混乱。

c# 代码  : 用 Roles.Providers  可以读取所有的  role 适配器,也就是 ASP.NET 应用程序名称 ,Roles.Providers["asp1"]  对象中有很多方法,例如:   .CreateRole 创建用户  GetAllRoles 获取所有用户 , 等

profile :

<profile enabled="true"  defaultProvider=" mymag"  automaticSaveEnabled="false">
<providers>
<clear/>
<add name="mymag" type=" System.Web.Profile.SqlProfileProvider" connectionStringName="DefaultConnection" applicationName="mymag"/>
</providers>
<properties>
<add name="apps" type="System.String[]" allowAnonymous="false"  defaultValue="" readOnly="false"/>
</properties>
</profile>

说明: powers  用于存放用户已授权APPNAME

c# 参考代码  :
var p= ProfileBase.Create(username);
p.SetPropertyValue(" apps", new string[] { "P01", "P02" });
p.Save();
var s = P.GetPropertyValue(" apps");

获得webapi 数据参考代码:
System.Net.WebClient c = new System.Net.WebClient();
string jsonstr=  c.DownloadString("http://1921.168.0.1/webapi");

拦截器:
创建一个类库项目 ,参考代码:
namespace SecurityManagementCenter
{
public class Handler : IHttpModule
{
public void Init(HttpApplication context)
{
context.AuthenticateRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
在此添加权限验证代码
context.Response.Write("error " + DateTime.Now.ToString()); //返回错误信息
application.CompleteRequest();  //终止访问
return;
}

将项目编译的DLL放置于个 各个 asp.net程序 bin 目录中
web.config 中 <configuration> 添加 配置节点 如下
经典模式  // 仅 asp.net 访问有效
<system.web>
<httpModules>
<add name="SecurityManagementCenter" type="SecurityManagementCenter.Handler,SecurityManagementCenter"/>
</httpModules>
</system.web>
集成模式   // preCondition="managedHandler"  仅 asp.net 访问
<system.webServer>
<modules>
<add name="SecurityManagementCenter" type="SecurityManagementCenter.Handler,SecurityManagementCenter" preCondition="managedHandler" />
</modules>
</system.webServer>

并完成一个测试型项目 , 源码地址    https://code.csdn.net/peiyu_peiyu/websecuritymanagementcentersystem

多web站点统一访问授权管理中心系统项目(源码)相关推荐

  1. 计算机毕业设计springboot家教平台中心系统53754源码+系统+程序+lw文档+部署

    计算机毕业设计springboot家教平台中心系统53754源码+系统+程序+lw文档+部署 计算机毕业设计springboot家教平台中心系统53754源码+系统+程序+lw文档+部署 本源码技术栈 ...

  2. 计算机毕业设计Java无人值守台球厅智能管理监控系统(源码+系统+mysql数据库+Lw文档)

    计算机毕业设计Java无人值守台球厅智能管理监控系统(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java无人值守台球厅智能管理监控系统(源码+系统+mysql数据库+Lw文档) 本源码技 ...

  3. java毕业生设计校园统一网络授课平台系统计算机源码+系统+mysql+调试部署+lw

    java毕业生设计校园统一网络授课平台系统计算机源码+系统+mysql+调试部署+lw java毕业生设计校园统一网络授课平台系统计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构 ...

  4. 计算机毕业设计ssm基于web的教学资源管理系统01jkz系统+程序+源码+lw+远程部署

    计算机毕业设计ssm基于web的教学资源管理系统01jkz系统+程序+源码+lw+远程部署 计算机毕业设计ssm基于web的教学资源管理系统01jkz系统+程序+源码+lw+远程部署 本源码技术栈: ...

  5. 计算机毕业设计ssm企业部门报销管理g9d62系统+程序+源码+lw+远程部署

    计算机毕业设计ssm企业部门报销管理g9d62系统+程序+源码+lw+远程部署 计算机毕业设计ssm企业部门报销管理g9d62系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开 ...

  6. 计算机毕业设计ssmJAVA高校田径运动会管理61s38系统+程序+源码+lw+远程部署

    计算机毕业设计ssmJAVA高校田径运动会管理61s38系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术:L ...

  7. 计算机毕业设计ssm哈尔滨市合欢婚庆公司管理588fz系统+程序+源码+lw+远程部署

    计算机毕业设计ssm哈尔滨市合欢婚庆公司管理588fz系统+程序+源码+lw+远程部署 计算机毕业设计ssm哈尔滨市合欢婚庆公司管理588fz系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构 ...

  8. 计算机毕业设计ssm基于微信的的高校起床协会管理61rmm系统+程序+源码+lw+远程部署

    计算机毕业设计ssm基于微信的的高校起床协会管理61rmm系统+程序+源码+lw+远程部署 计算机毕业设计ssm基于微信的的高校起床协会管理61rmm系统+程序+源码+lw+远程部署 本源码技术栈: ...

  9. Java SSM 商户 管理系统 客户管理 库存管理 销售报表 项目源码

    统介绍: 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3 SSM 普通 ...

最新文章

  1. 哪个工具编译java_用什么工具来编译JAVA啊?
  2. 2021年人工智能数据采集标注行业四大趋势预测
  3. 多径信道理论的直观感受与MATLAB仿真
  4. 可见性得以保障,并不意味着_战略模式并不意味着春天!
  5. 抱歉(HDU-1418)
  6. 11134 - Fabled Rooks
  7. 发布一个网页智能解析算法库
  8. gerber文件_90%的工程师容易忽视(一):PCB输出gerber文件,这样操作才正确
  9. BeanUtils组件使用小指南
  10. 计算机定义函数求出以下,求大神看一下 计算机提示 函数定义不合法
  11. APP的原型制作流程
  12. Java文件拒绝访问问题
  13. word2010中“不包含”、“不存在”等特殊字符的输入方法
  14. 云班课蓝墨云网页版资源如何下载
  15. Android学习计划 Android学习总结
  16. 删除Windows11中设备与驱动器下的多余图标
  17. 老人智能手表方案/案列/APP/小程序/网站
  18. 项目里的UT越来越慢,怎么办?
  19. Python 短文本自动识别个体是否有自杀倾向
  20. 轻生女孩跳下地铁站台被4节车厢滑过生还(图)

热门文章

  1. 阿里系收购中兴软创,意欲借船出海
  2. 标准 IO 库的缓冲区
  3. Libmad音频解码库的编译和使用
  4. 自定义重复注解 @Repeatable 使用方式
  5. 线下分享 | 2018云和恩墨大讲堂深圳站
  6. 用爬虫写一个 GitHub Trending API
  7. c语言中自定义函数返回数组,C语言自定义函数返回数组的方法(图文详解)
  8. 《Programming in Lua 3》读书笔记(二十八)
  9. Netty学习记录-初步认识Netty及I/O模型
  10. docker 运行过程 以及网络