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