饿了么:基于SpringBoot的Web层服务开发实战!


摘要

在饿了么各类业务和运营系统中,普遍使用了基于Token的认证机制。本次分享,介绍一个通用的、可扩展的SpringSecurity Filter支撑这些业务系统开发,在实际应用中取得了良好的效果。

包括以下内容:

1. 嵌入式Servlet容器的引擎的原理和机制

2. Spring MVC自动化配置的背后详情

内容来源:2017年5月21日,饿了么架构师孙立伟在“饿了么技术沙龙【第六弹】北京研发中心·Java专场”进行《基于SpringBoot的Web层服务开发实践》演讲分享。IT 大咖说作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:1082 | 4分钟阅读

嘉宾演讲视频回放: t.cn/RQxtrq0

Spring Boot的设计目标

使Spring Framework的应用开发变得简单,容易上手。非侵入性地提供一套常用的配置,“非侵入性”保证了用户可以随时覆盖所有的默认配置。提供更多的基础性、非业务的功能(内置Web容器、权限认证机制、监控、应用配置管理等等),完全不依赖XML配置。

Spring Boot不能取代Spring Framework。想要用好Spring Boot,必须对Spring Framework有足够的知识。

基于Spring Boot的应用

独立可执行Jar;内置Servlet容器(Jetty/Tomcat/Undertow),不用部署war包;自动化配置机制,对常见的Spring基础组件(Data、Security、MVC、MQ…)提供“即开即用”的默认配置。

Cloud Friendly:脚本可定制,适配init.d/systemd;External Configuration灵活的配置注入机制;Actuator应用管理和监控。

Spring Boot是Spring Cloud的基础,它所有的特性就是为了让JAVA应用在当下的云环境中更容易地部署执行,实现微服务。


基于Token的认证机制

根据任意一种认证手段,如用户名+密码、手机号+验证码等方式生成Token。

我个人认为Token是为了取代现在传统的、基于session认证机制的一个机制。Token是一个灵活的解决方案,更适用于移动端开发。

因为传统基于session的机制非常限制应用程序水平的扩展,我们不得不去维护session的一致性,对当下云计算环境中的水平扩展有害。

基于Token的认证机制推荐标准是JWT。

应用场景

移动端用户认证解决方案;RESTful API开发;替代传统的基于Session的用户认证登录机制。

Talk is cheap.
Show me the code.


思考

如何强制收回一个有效的Token?

可以用redis,需要注意的是,一旦用了redis,就会有状态的维护和扩展的问题。

Token有效期设置多长合适?

这个问题需要根据业务场景、依据业务系统和类型去仔细考虑。

Token的缺点

当使用JWT的时候,很容易让开发人员在Token里面塞入太多的东西。Token的职责应该尽量单一,它只是用于做认证鉴权。不要基于Token做太多的业务逻辑,Token的体积不能太大。这在架构层面没有统一的解决方法,只是依赖于业务系统规则的约束。

Spring Boot是打开Spring Cloud大门的钥匙

饿了么目前的服务治理已经有了成熟的现有框架,和Spring Cloud会有一些相关的冲突,这是我们业务系统的现状。基于Spring Boot,我们正在做的就是如何把Spring Boot改造成适合我们公司的框架。

饿了么业务的特点就是它的高峰和低峰期特别明显,对于所有系统的弹性要求非常高。我们的CTO一直在规划Cloud Native整体的架构。在我们内部有一个通用的API网关系统,它的认证鉴权系统是就是一套基于Token的可扩展的框架。这个网关系统,就是完全运行在Mesos平台之上的。

我今天的分享就到这里,谢谢大家!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园食堂订餐系统,是将计算机、通信等现代化技术运用到传统校园食堂服务的新型校园食堂服务方式。 校园食堂订餐系统为了解决以下几个问题:一是疫情期间,学生面临着开学,食堂是学生最聚集的场所之一,食堂订餐系统可以良好的解决学生饮食期间的拥挤等问题;二是让学生健康饮食,减轻目前的大学生吃外卖和不健康食品的问题;三是方便和改善学生的伙食,让学生可以随时随地的选购菜品;四是提高食堂商家的利润,改善商家的销售额。 本文在考虑到以上的问题的基础上,利用大学期间中所学到的的专业知识,独立开发一个基于Spring Boot和vue.js的校园食堂订餐系统。论文首先进行了系统功能的总体设计,使本系统具有以下主要功能:一是具有手机端让学生可以随时随地挑选食堂商家的菜品;二是可以让学生可以提交订单、一定时间范围修改和撤销订单;三是具有线上学生一卡通支付功能;四是对菜品销售情况具有统计功能方便商家查看与统计。 本文系统后台使用Spring Boot新型轻量开发框架,采用基本的B/S的互联网架构,前台技术使用可跨Android、IOS、H5、小程序的uni-app进行开发,使用IDEA的IntelliJ IDEA 2019.3.1 x64和WebStorm 2020.1 x64开发工具实现后台与前台的编码。使用MySQL数据库存储技术进行开发。最后完成了系统测试工作和调试工作,满足了校园食堂订餐系统的要求。 最后,对课题工作进行了总结,并对未来研究工作给予了展望。
一个完整的外卖系统,包括手机端,后台管理,api 基于spring boot和vue的前后端分离的外卖系统 包含完整的手机端,后台管理功能 技术选型 核心框架:Spring Boot 数据库:Spring data jpa/Spring data mongodb 数据库连接池:Druid 缓存:Ehcache 前端:Vue.js 数据库:mysql5.5以上,Mongodb4.0(不要使用最新版4.2) 模块 flash-waimai-mobile 手机端站点 flash-waimai-manage后台管理系统 flash-waimai-api java接口服务 flash-waimai-core 底核心模块 flash-waimai-generate 代码生成模块 快速开始 数据存储采用了mysql和mongodb,其中基础管理配置功能数据使用mysql,业务数据使用mongodb存储。 创建mysql数据库 CREATE DATABASE IF NOT EXISTS waimai DEFAULT CHARSET utf8 COLLATE utf8_general_ci; CREATE USER 'waimai'@'%' IDENTIFIED BY 'waimai123'; GRANT ALL privileges ON waimai.* TO 'waimai'@'%'; flush privileges; mysql数据库创建好了之后,启动flash-waimai-api服务,会自动初始化数据,无需开发人员自己手动初始化数据 安装mongodb并创建数据库:flash-waimai 使用mongorestore命令 导入mongodb数据,由于测试数据量较大,打包放在了百度云盘:链接:https://pan.baidu.com/s/1mfO7yckFL7lMb_O0BPsviw 提取码:apgd 下载后将文件解压到d:\elm,如下命令导入数据: mongorestore.exe -d flash-waimai d:\\elm 下载项目测试数据的图片(商家和食品图片):链接:https://pan.baidu.com/s/1rvZDspoapWa6rEq2D_5kzw 提取码:urzw ,将图片存放到t_sys_cfg表中system.file.upload.path配置的目录下 启动管理平台:进入flash-waimai-manage目录:运行 npm install --registry=https://registry.npm.taobao.org运行npm run dev启动成功后访问 http://localhost:9528 ,登录,用户名密码:admin/admin 启动手机端:进入flash-waimai-mobile目录:运行 npm install --registry=https://registry.npm.taobao.org运行npm run local启动成功后访问 http://localhost:8000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值