[SpringCloud]从零搭建基于SpringCloud的网约车后端项目(三)

一、本阶段成果

实现shiro+springboot整合登录功能,用于账户系统微服务

二、技术介绍

What is Apache Shiro?

Apache Shiro (pronounced “shee-roh”, the Japanese word for ‘castle’) is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management and can be used to secure any application - from the command line applications, mobile applications to the largest web and enterprise applications.
Shiro provides the application security API to perform the following aspects (I like to call these the 4 cornerstones of application security):
Authentication - proving user identity, often called user ‘login’.
Authorization - access control
Cryptography - protecting or hiding data from prying eyes
Session Management - per-user time-sensitive state
Shiro also supports some auxiliary features, such as web application security, unit testing, and multithreading support, but these exist to reinforce the above four primary concerns.

翻译过来核心关键字:Apache Shiro是一种功能强大且易于使用的Java安全框架,它执行身份验证,授权,加密和会话管理,可用于保护任何应用程序的安全-从命令行应用程序,移动应用程序到最大的Web和企业应用程序。

主要功能:

  • 身份验证-证明用户身份,通常称为用户“登录”
  • 授权-访问控制
  • 密码术-保护或隐藏数据以防窥视
  • 会话管理-每个用户的时间敏感状态

Shiro架构设计

在这里插入图片描述

  • Subject:主体,可以看到主体可以是任何可以与应用交互的 “用户”;

  • SecurityManager:相当于 SpringMVC 中的 DispatcherServlet 或者 Struts2 中的 FilterDispatcher;是 Shiro 的心脏;所有具体的交互都通过 SecurityManager 进行控制;它管理着所有 Subject、且负责进行认证和授权、及会话、缓存的管理。

  • Authenticator:认证器,负责主体认证的,这是一个扩展点,如果用户觉得 Shiro 默认的不好,可以自定义实现;其需要认证策略(Authentication Strategy),即什么情况下算用户认证通过了;

  • Authrizer:授权器,或者访问控制器,用来决定主体是否有权限进行相应的操作;即控制着用户能访问应用中的哪些功能;

  • Realm:可以有 1 个或多个 Realm,可以认为是安全实体数据源,即用于获取安全实体的;可以是 JDBC 实现,也可以是 LDAP 实现,或者内存实现等等;由用户提供;注意:Shiro 不知道你的用户 / 权限存储在哪及以何种格式存储;所以我们一般在应用中都需要实现自己的 Realm;

  • SessionManager:如果写过 Servlet 就应该知道 Session 的概念,Session 呢需要有人去管理它的生命周期,这个组件就是 SessionManager;而 Shiro 并不仅仅可以用在 Web 环境,也可以用在如普通的 JavaSE 环境、EJB 等环境;所以呢,Shiro 就抽象了一个自己的 Session 来管理主体与应用之间交互的数据;这样的话,比如我们在 Web 环境用,刚开始是一台 Web 服务器;接着又上了台 EJB 服务器;这时想把两台服务器的会话数据放到一个地方,这个时候就可以实现自己的分布式会话(如把数据放到 Memcached 服务器);

  • SessionDAO:DAO 大家都用过,数据访问对象,用于会话的 CRUD,比如我们想把 Session 保存到数据库,那么可以实现自己的 SessionDAO,通过如 JDBC 写到数据库;比如想把 Session 放到 Memcached 中,可以实现自己的 Memcached SessionDAO;另外 SessionDAO 中可以使用 Cache 进行缓存,以提高性能;

  • CacheManager:缓存控制器,来管理如用户、角色、权限等的缓存的;因为这些数据基本上很少去改变,放到缓存中后可以提高访问的性能

  • Cryptography:密码模块,Shiro 提高了一些常见的加密组件用于如密码加密 / 解密的。

三、整体设计

账户系统微服务提供用户登录和操作信息的功能,需要控制用户可以进行的操作,所以使用shiro来进行登录管理,整体为三步骤:

  1. 用户登录保存session到Shiro
  2. 用户发起操作请求,验证携带的session
  3. 验证通过执行操作

四、代码实现

完整代码:SpringBoot+Shiro整合样例

五、总结与感悟

  1. 在选择使用哪一种认证框架的时候做过相关调研,目前这两种使用的比较多:Shiro和Spring Security
    两者比较结果:(参考:https://www.jianshu.com/p/0891b2279c65
    a) Shiro比Spring更容易使用,实现和最重要的理解
    b) Spring Security更加知名的唯一原因是因为品牌名称
    c) “Spring”以简单而闻名,但讽刺的是很多人发现安装Spring Security很难,然而Spring Security却有更好的社区支持
    d) Apache Shiro在Spring Security处理密码学方面有一个额外的模块
    e) Spring-security 对spring 结合较好,如果项目用的springmvc ,使用起来很方便
    f) Shiro 功能强大、且 简单、灵活。是Apache 下的项目比较可靠,且不跟任何的框架或者容器绑定,可以独立运行
    我第一次做这种身份验证,所以选择了难度较低的Shiro,这也足以满足我的需求。
  2. Shiro的优点
  • 简单的身份认证, 支持多种数据源
  • 对角色的简单的授权, 支持细粒度的授权(方法级)
  • 支持一级缓存,以提升应用程序的性能;
  • 内置的基于 POJO 企业会话管理, 适用于 Web 以及非 Web 的环境
  • 非常简单的加密 API
  • 不跟任何的框架或者容器捆绑, 可以独立运行
  1. Shiro认证过程
    创建SecurityManager -> 主体提交认证 -> SecurityManager认证 -> Authenticator认证 -> Realm验证
  2. Shiro授权过程
    创建SecurityManager ->主体授权 -> SecurityManager授权 -> Authorizer授权 ->Realm获取权限数据
  3. 对所用框架的理解要足够深,如果有能力去读读源码(我还不行,我一点点继续努力吧)

六、下一阶段目标

实现派单引擎,重点功能:并发和事务

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Spring Cloud是一个基于Java语言的开源微服务框架,它集成了多个微服务组件,如服务注册发现、负载均衡、断路器等,以帮助开发者构建灵活可扩展的分布式系统。在网约车系统中,Spring Cloud可以提供以下功能和特性: 1. 服务注册发现:Spring Cloud可以使用Eureka、Consul等服务注册中心来管理系统中的各个微服务实例,实现自动的服务注册与发现。 2. 负载均衡:Spring Cloud通过集成Ribbon,可以实现在网约车系统的多个服务实例之间进行负载均衡,以提高系统性能和可用性。 3. 断路器:Spring Cloud通过集成Hystrix提供了断路器功能,可以防止由于某个服务异常导致整个系统雪崩效应的发生,提高系统的容错能力。 4. 配置中心:Spring Cloud可以使用Config Server来集中管理系统的配置信息,并提供配置的动态刷新功能,方便系统在运行时更新配置信息。 5. 网关路由:Spring Cloud的Zuul组件可以作为网关路由器,统一对外提供网约车系统的API,并进行请求的转发和过滤,提高系统的安全性和性能。 6. 分布式追踪:Spring Cloud通过集成Sleuth和Zipkin等组件,可以对网约车系统中的请求进行跟踪和监控,帮助开发者定位和解决系统中的性能问题。 7. 微服务监控:Spring Cloud可以使用Actuator组件来监控各个微服务的运行状态和性能指标,帮助开发者及时发现和解决系统中的问题。 综上所述,Spring Cloud可以为网约车系统提供一系列的微服务架构解决方案,帮助系统实现高可用、高性能、可扩展的特性。 ### 回答2: Spring Cloud 是一个开源的分布式系统框架,它提供了一系列的工具和组件,用于构建和管理网约车系统。Spring Cloud 的特点是轻量级、易扩展和灵活,它提供了各种分布式系统的解决方案,包括服务注册与发现、负载均衡、配置管理、断路器、消息总线等。 网约车系统是一种基于互联网和移动互联网的交通工具预约服务,它通过在移动端应用上提供下单、叫车、支付等功能,为乘客提供便捷的出行方式。而Spring Cloud作为一个分布式系统框架,可以为网约车系统提供一些关键的技术支持和服务。 首先,Spring Cloud可以通过提供服务注册与发现的能力,来帮助网约车系统实现车辆和司机的动态管理。通过服务注册与发现,车辆和司机可以将自己的服务注册到注册中心,乘客可以通过注册中心找到可用的车辆和司机,以实现查找、预约和调度的功能。 其次,Spring Cloud还提供了负载均衡的功能,可以通过负载均衡算法将乘客的请求分配到后端的多个服务实例上,以保证服务的高可用性和稳定性。 此外,Spring Cloud的配置管理功能可以帮助网约车系统动态调整配置参数,如车辆信息、价格策略等,以满足市场需求的变化。 最后,Spring Cloud还提供了断路器和消息总线等功能,用于解决分布式系统中的故障和异常情况,从而保证系统的可靠性和稳定性。 综上所述,Spring Cloud作为一个分布式系统框架,可以为网约车系统提供各种关键的技术支持和服务,帮助系统实现车辆和司机的动态管理、请求的负载均衡、配置的动态调整和异常情况的处理,从而提升系统的性能和稳定性。 ### 回答3: Spring Cloud是一个开源的微服务框架,可以用于构建分布式系统中的各个微服务模块。网约车系统是一种基于互联网的交通服务平台,通过手机应用程序连接乘客和司机,提供便捷、快速、安全的出行方式。 Spring Cloud可以为网约车系统提供许多功能和特性。首先,它可以实现服务注册与发现,让每个微服务都可以自动注册到注册中心,方便其他微服务进行发现和调用。这样就能确保司机和乘客之间的信息交换能够实时、准确地进行。 其次,Spring Cloud还提供了负载均衡的功能,可以根据请求的实际情况将请求分发给多个具有相同功能的微服务实例,提高系统的并发处理能力,增强系统的稳定性和可用性。 此外,Spring Cloud还支持断路器模式,可以实现微服务之间的容错处理,当某个微服务出现故障或响应时间过长时,系统可以通过设置超时时间或调用备用服务等方式,避免整个系统的崩溃。 另外,通过使用Spring Cloud的配置中心,可以实现微服务的统一配置管理,方便对系统进行配置变更和管理。这样可以大大减少人工操作的频次,提高管理效率。 最后,Spring Cloud还提供了监控和日志收集的功能,可以实时监控服务的状态,定位和解决潜在的问题,保证系统的稳定运行。 综上所述,Spring Cloud作为一个强大的微服务框架,可以为网约车系统提供服务注册与发现、负载均衡、断路器、配置管理和监控等功能,提高系统的可靠性、稳定性和可维护性,为用户和司机提供更好的交通服务体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯糖不加咖啡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值