系统拆分培训概要

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1系统整合培训LOGO2*CONTENTSPAGE目录页1系统拆分概述系统拆分技术准备如何拆分?达到目标2343*TRANSITIONPAGE过渡页•为什么要拆分?•拆分遵循的原则第一章系统拆分概述4第一章系统拆分概述1.随着业务的发展,模块之间的耦合性越来越强第一节为什么要拆分?1.系统按照业务拆分按照高内聚、低耦合的条件进行拆分2.开发人员越来越多,相互之间代码版本也难以管理4.系统越大,硬件要求也会越来越高,但是硬件是有极限的,随着数据量以及并发量的不断上升,其解决方案的成本也会随之直线上涨3.难于维护,难于扩展第二节拆分遵循的原则2.尽量减少系统之间的通信5第二章技术准备第二章系统拆分技术准备?•CAS单点登录•Shiro单点登录流程图第一节CAS单点登录•Maven继承管理依赖包及拆分的子项目依赖关系说明•Dubbo使用•RabbitMQ使用6第二章技术准备左图是一个最基础的CAS协议,CASClient以Filter方式保护Web应用的受保护资源,过滤从客户端过来的每一个Web请求,同时,CASClient会分析HTTP请求中是否包含ServiceTicket(左图中的Ticket),如果没有,则说明该用户是没有经过认证的,于是,CASClient会重定向用户请求到CASServer(Step2)。Step3是用户认证过程,如果用户提供了正确的Credentials,CASServer会产生一个随机的ServiceTicket,然后,缓存该Ticket,并且重定向用户到CASClient(附带刚才产生的ServiceTicket),ServiceTicket是不可以伪造的,最后,Step5和Step6是CASClient和CASServer之间完成了一个对用户的身份核实,用Ticket查到Username7第二章技术准备第二节ShiroShiro能做什么?认证、授权、加密、会话管理、与Web集成、缓存等。Authentication:身份认证/登录,验证用户是不是拥有相应的身份;(在我们系统是用CAS做身份认证,shiro做授权功能)Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;SessionManager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;WebSupport:Web支持,可以非常容易的集成到Web环境;Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;8第二章技术准备Concurrency:shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;Testing:提供测试支持;RunAs:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;RememberMe:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。记住一点,Shiro不会去维护用户、维护权限;这些需要我们自己去设计/提供;然后通过相应的接口注入给Shiro即可。可以看到:应用代码直接交互的对象是Subject,也就是说Shiro的对外API核心就是Subject;其每个API的含义:Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;即一个抽象概念;所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者;9SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject;可以看出它是Shiro的核心,它负责与后边介绍的其他组件进行交互,如果学习过SpringMVC,你可以把它看成DispatcherServlet前端控制器;Realm:域,Shiro从从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。也就是说对于我们而言,最简单的一个Shiro应用:1、应用代码通过Subject来进行认证和授权,而Subject又委托给SecurityManager;2、我们需要给Shiro的SecurityManager注入Realm,从而让SecurityManager能得到合法的用户及其权限进行判断。从以上也可以看出,Shiro不提供维护用户/权限,而是通过Realm让开发人员自己注入。第二章技术准备10第二章技术准备11第三节Maven继承管理依赖包及拆分的子项目依赖关系说明Maven是一套标准的项目构建和管理工具,使用统一规范的脚本进行项目构建,简单易用,如果能充分利用maven中的继承关系管理依赖包,可避免重复写入依赖相同的包。第二章技术准备判断是否提供targetBeanName初始化参数,如果没有提供则直接使用filter的name做为beanName12举例:base-data工程包含base-data-api,base-data-core,base-data-web等3个模块base-common:主要提供基础功能类和通用工具类,供其他项目依赖,参照每个项目根目录下的readmebase-data-api:这个是对其他子系统提供的服务接口,客户端通过dubbo来调用服务接口.base-data-core:这个子模块依赖base-data-api,base-common,主要提供业务实现,主要包含base-data-api的实现类,dao和dao实现类,service接口及service实现类,以及操作表的xml配置文件和xml对应的model类.base-data-web:依赖base-data-core.注意:core模块不提供接口,其他子系统也不能依赖它.其他子系统只能依赖api模块,web模块可提供手机端url请求调用。第二章技术准备13第二章技术准备第四节Dubbo使用服务端dubbo配置:14客户端dubbo配置:第二章技术准备15第五节RabbitMQ使用第二章技术准备生产者生产消息16消费者消费消息第二章技术准备17第三章如何拆分?1根据对旧系统的分析,将旧系统拆分成如下工程:base-data,cmct,eb-base,eb-bi,eb-finance,eb-site,eb-storage,Framework,hr,interflow,workflow,所有web模块都依赖framework,每个子系统都要有旧系统的布局框架页面2有一个集中权限管理系统,完成对各个子系统进行集中授权。3拆分过程注意事项:a)wuyizhiye改成ffzx.b)代码不依赖license.c)每个子系统中保留framework内的workbench相关整体布局的页面及公共的页面(无权访问,出错页面等页面)d)不引入无用的依赖包e)字段前缀F和FK去掉,如果去掉后名字和关键字重复,则命名和sql关键字不冲突的名字,和java对象的属性保持一致,另外数据库字段名变成小写,对应xml也变成小写(注意:各个子系统平稳运行后再做e项)第三章如何拆分第四章达到目的系统拆分后,达到一次登录,系统登陆后看到的界面效果和拆分前完全一样,不同的是拆分后是多个独立部署的应用协作完成的,下图中拆分后每个红色方格都是一个独立的系统。18谢谢!

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功