A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1) Nginx
i. 什么是nginx?
1. Nginx是一款高性能的http服务器、反向代理服务器、电子邮件服务器
2. 官方测试nginx能够支撑5W并发连接,并且内存等资源消耗非常低,运行稳定。
3. 引用场景:
a) http服务器:nginx是一个http服务可以独立提供http服务,可以叫做网页静态服务器
b) 虚拟主机:可以实现一台服务器虚拟出多个网站
c) 反向代理(负载均衡服务器):在高并发情况下,需要用多台服务器集群可以使用nginx做反向代理,并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
4.
ii. 项目中什么地方用到了nginx?
1. 访问商品详情页面时,是通过访问nginx静态资源服务器访问商品详情页面。
2. 登录注册通过nginx反向代理访问sso单点登录的session服务器和应用服务器
iii. 为什么要使用nginx?
1. 单个Tomcat最大能处理的并发只有500不到,考虑整个商场项目上线后的并发量远不止500,需要更大的并发,tomcat不能满足需求。
2. 单个Nginx的并发可以达到50000,相对于tomcat,并发量的到巨大的提升
3. 传统访问模式:客户端------》应用服务器:并发低,反应慢
4. 加入nginx:客户端----》nginx----》引用服务器集群:将一个应用部署在多台服务器上,将大量请求分配给多台服务器处理,同时带来的好处是某台服务器挂了,只要其他服务器还在运行,不会影响用户使用。
a) 负载均衡原理:http upstream模块,这个模块通过一个简单的调度算法来实现客户端ip到后端服务器的负载均衡,算法有四种:
i. 轮询(默认):每个请求按时间顺序逐一分配到不 同的后端服务器,如果后端某台服务器挂掉了,故障系统自动剔除,使用户访问不受影响;使用weight指定轮询的权重,权重越大的被访问的几率越大,主要用于后端服务器性能不均衡的情况。
ii. Ip-hash:每个请求按访问ip的hash结果分配,这样来自同一个ip的用户固定访问一个后端服务器,有效解决了动态页面存在session共享问题
iii. Fair:这是 一个更加智能的负载均衡算法,此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块
iv. url-hash: 此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包
5. nginx高可用,为了屏蔽负载均衡服务器宕机,需要建立一个备份机,主备机之间采用心跳检测机制。
6. 总之nginx功能强大,用它没毛病
iv. 怎么使用的nginx?
1.
v. 使用nginx存在什么问题?
2) 单点登录(single sign on)
i. 什么是单点登录系统?
1. 在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,它包括可以将本次登录映射到其他应用中,用于同一个用户的登录机制
ii. 为什么要有点单登录?
1. 传统的登录方案是将用户信息保存在session中,放在session中存在一个问题就是session共享问题,也就是在集群情况下,session存在的服务器不一样时,要保证这些session中的内容都一样才能确定用户是否已经登录,一般的解决方案是把session复制,但是当集群过多时,session复制会引发集群风暴,降低服务器的性能,故而我们将session单独提取出来做一个session服务器,每次登录访问session服务器来判断用户是否登录,也实现了session的统一管理。
2. 使用session服务器,保存session信息,使集群的每个节点都是五状态的,需要模拟session,我们使用redis模拟session,实现session的统一管理。
iii. 项目中怎么实现的单点登录?
1. 业务逻辑:
a) 普通登录,在服务端检查用户名和密码是否正确,不正确返回登录界面,正确执行下一步
b) 生成token(令牌),那用户信息保存至redis中并设置一个有效时间
c) 返回登录成功
d) Token写入cookie中
e) 判断是否有回调url(在用户是从订单页面跳转登录,然后登录成功后应该跳转回订单页面),没有则进入首页,有则进入下一步
f) 返回用户已经登录,显示订单信息
g) 用户选择查看订单
h) 请求查询订单到服务端
i) cookie中取token
j) 调用sso服务根据token查询用户信息,接收token
k) 根据token查询session
l) 判断token的值是否还存在,不存在说明已经过期需要重新登录,存在则进入下一步
m) 调整token对应的值的过期时间
n) 返回用户已登录
o) 显示订单
3) Shiro(权限框架)
i. Shiro是什么?
1. java的一个安全框架,使用简单,功能强大,执行身份认证、授权、密码学和会话管理,使用shiro的易于理解的api,可以快速、轻松的获得任何应用程序。
2. 四大基石
a) 身份认证(Authentication),有时也简称为“登录”,这是一个证明用户是他们所说的他们是谁的行为
b) 授权(Authorization),访问控制的过程,也就是决定“谁”去访问“什么”
c) 会话管理(Session Managerment),管理用户特定的会话,即使在非web或ejb应用
d) 加密(Cryptography),通过使用加密算法保持数据安全同时易于使用
ii. 项目中什么地方使用了shiro?
iii. 为什么要使用shiro?
1. 对比springSecurity
a) 没有springsecurity功能强,实际应用并不需要那么复杂的东西,使用小巧而简单的shiro就足够了。
b)
iv. 怎么使用shiro?
1. Shiro运行主要运行流程
a) Application(用户编写的代码)
b) Subject(就是shrio管理的用户)
c) Shrio securityManager(安全管理器):是shrio权限控制核心对象,在编程时,只需要操作subject方法,底层调用securityManager方法,无需直接操作securityManager
d) Realm(应用程序和安全数据之间连接器):应用程序进行权限控制读取安全数据,通过realm对象完成
2. 执行流程:应用程序调用subject,subject调用shrio manager,依次调用realm,realm在读取安全数据。
3. 四种权限控制方式:
a) 在程序中通过配置subject编程方式
b) 配置filter实现url粗粒度
c) 配置dialing,基于注解实现细粒度
d) 在页面使用shiro自定义标签实现页面显示权限控制
4. url粗粒度实现过程:
a) web.xml中配置一个名为shiroFilter的delegatingFilterProxy,名字不能乱取,因为他会去spring的配置文件中取寻找同名的shrioFilter的bean。
b) applicationContext-shiro.xml中配置shiroFiltershiroFilterfactory权限过滤
c) 配置realm
d) 配置安全管理器
e) 将自定义realm注入安全管理器securityManager中
f) 在登录方法中
g) securityUtils中获取subject对象,调用个getSubject()方法获取
h) Subject对象调用其中方法(登录退出)
i) 自定义realm对象,实现认证方法(doGetAuthentication())和授权方法(doGetAuthorizationInfo())
j)
5. 方法级别细粒度实现过程
a) 配置applicationContext激活注解(defaultAdvisorAutoProxyCreator和authorizationAttributeSourceAdvisor---注入securityManager)
b) 在方法上使用注解(@RequiresUser………)
c) 代理目标类开启,在注解管理实务<tx:annotation-driven proxy-target-class=”true”>
d) 开启shiro注解<property name=”proxyTargetClass” value=”true”>
e)
v. 使用shiro存在什么问题?
游客,如果您要查看本帖隐藏内容请回复

6 个回复

倒序浏览
我来占层楼啊  
回复 使用道具 举报
6666666666666666666666666
回复 使用道具 举报
66666666666666666
回复 使用道具 举报
66666666666666666
回复 使用道具 举报
666666666666666666666666
回复 使用道具 举报
6666666666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马