易课寄在线购课系统开发笔记(二十九)--完成用户登录功能
用户登录
功能分析
请求的 url:/user/login
请求的方法:POST
参数:username、password,表单提交的数据,可以使用方法的形参接收。
返回值:JSON 数据,使用 ECoursesResult 包含一个 token。
业务逻辑:
登录的业务流程:
登录的处理流程:
1、登录页面提交用户名密码;
2、登录成功后生成 token。token 相当于原来的 jsessionid,字符串,可以使用 uuid;
3、把用户信息保存到 Redis。key 就是 token,value 就是 EcoursesUser 对象转换成 JSON;
4、使用 String 类型保存 Session 信息。可以使用 “前缀: token” 为 key;
5、设置 key 的过期时间。模拟 Session 的过期时间,一般为半小时;
6、把 token 写入 Cookie 中;
7、Cookie 需要跨域。例如 www.ecourses.cn \ sso.ecourses.cn \ order.ecourses.cn,可以使用工具类;
8、Cookie 的有效期为关闭浏览器失效;
9、登录成功。
Dao层
查询 ecourses_user 表。单表查询。可以使用逆向工程。
Service层
参数:
1、用户名:String username
2、密码:String password
返回值:ECoursesResult,包装 token。
业务逻辑:
1、判断用户名密码是否正确;
2、登录成功后生成 token。token 相当于原来的 jsessionid,字符串,可以使用 uuid;
3、把用户信息保存到 Redis。key 就是 token,value 就是 EcoursesUser 对象转换成 JSON;
4、使用 String 类型保存 Session 信息。可以使用 “前缀: token” 为key;
5、设置 key 的过期时间。模拟 Session 的过期时间。一般为半小时;
6、返回 ECoursesResult 包装 token。
@Override
public ECoursesResult userLogin(String username, String password) {// 1、判断用户和密码是否正确//根据用户名查询用户信息EcoursesUserExample example = new EcoursesUserExample();Criteria criteria = example.createCriteria();criteria.andUsernameEqualTo(username);//执行查询List<EcoursesUser> list = userMapper.selectByExample(example);if (list == null || list.size() == 0) {//返回登录失败return ECoursesResult.build(400, "用户名或密码错误");}//取用户信息EcoursesUser user = list.get(0);//判断密码是否正确if (!DigestUtils.md5DigestAsHex(password.getBytes()).equals(user.getPassword())) {// 2、如果不正确,返回登录失败return ECoursesResult.build(400, "用户名或密码错误");}// 3、如果正确生成token。String token = UUID.randomUUID().toString();// 4、把用户信息写入redis,key:token value:用户信息user.setPassword(null);jedisClient.set("SESSION:" + token, JsonUtils.objectToJson(user));// 5、设置Session的过期时间jedisClient.expire("SESSION:" + token, SESSION_EXPIRE);// 6、把token返回return ECoursesResult.ok(token);
}
发布服务
<dubbo:service interface="cn.ecourses.sso.service.LoginService" ref="loginServiceImpl" timeout="600000"/>
表现层
引用服务:
<dubbo:reference interface="cn.ecourses.sso.service.LoginService" id="loginService" />
Controller
请求的 url:/user/login
请求的方法:post
参数:username、password,表单提交的数据。可以使用方法的形参接收。
HttpServletRequest、HttpServletResponse
返回值:JSON 数据,使用 ECoursesResult 包含一个 token。
业务逻辑:
1、接收两个参数;
2、调用 Service 进行登录;
3、从返回结果中取 token,写入 Cookie。Cookie 要跨域。
Cookie 二级域名跨域需要设置:
1)setDomain,设置一级域名:
.ecourses.cn
2)setPath。设置为“/”
工具类放到 ecourses-common 工程中。
4、响应数据。JSON 数据。ECoursesResult,其中包含 token。
@RequestMapping(value="/user/login", method=RequestMethod.POST)
@ResponseBody
public ECoursesResult login(String username, String password,HttpServletRequest request, HttpServletResponse response) {ECoursesResult ecoursesResult = loginService.userLogin(username, password);//判断是否登录成功if(ecoursesResult.getStatus() == 200) {String token = ecoursesResult.getData().toString();System.out.println(token);System.out.println(TOKEN_KEY);//如果登录成功需要把token写入cookieCookieUtils.setCookie(request, response, TOKEN_KEY, token);}//返回结果return ecoursesResult;
}
易课寄在线购课系统开发笔记(二十九)--完成用户登录功能相关推荐
- 易课寄在线购课系统开发笔记(二十五)--完成课程详情页面展示相关功能(应用Redis缓存)
课程详情页面展示 创建一个课程详情页面展示的工程,是一个表现层工程. 工程搭建 ecourses-item-web.打包方式 war. 可以参考 易课寄在线购课系统开发笔记(七)–后台管理系统工程搭建 ...
- 易课寄在线购课系统开发笔记(十五)--完成购课系统门户的工程搭建
购课系统门户首页 工程搭建 可以参考 易课寄在线购课系统开发笔记(七)–后台管理系统工程搭建分析 ecourses-bms-web 工程的搭建过程. 功能分析 请求的 url:/index web.x ...
- 易课寄在线购课系统开发笔记(三十三)--完成购物车系统的开发
购物车的实现 功能分析 1.购物车是一个独立的表现层工程: 2.添加购物车不要求登录,可以指定购买课程的数量: 3.展示购物车列表页面: 4.修改购物车课程数量: 5.删除购物车课程. 工程搭建 ec ...
- 易课寄在线购课系统开发笔记(十六)--完成内容服务系统的工程搭建
首页动态展示分析 内容信息要从数据库中获得. 动态展示分析 内容需要进行分类. 分类下有子分类,需要动态管理. 分类下有内容列表. 单点的内容信息: 有图片 有链接 有标题 有价格 包含大文本类型,可 ...
- 易课寄在线购课系统开发笔记(三)--数据库设计
概念结构设计 ER 图如图所示. 表的详细设计 通过对领域对象.业务对象及对象间关联的分析,对本系统的数据库表进行了设计.本系统数据库管理采用 MySQL. 管理员信息表 ( ecourses_adm ...
- 易课寄在线购课系统开发笔记(十一)--完成课程列表查询的功能
展示后台首页 功能分析 请求的url:/ 参数:无 返回值:逻辑视图String Controller package cn.ecourses.controller; //页面跳转Controller ...
- 易课寄在线购课系统开发笔记(三十一)--登录注册页面实现
登录注册页面实现 注册功能 第一步:把静态页面添加到工程中. 第二步:展示页面. 请求的url: 登录:/page/login 注册:/page/register 参数:无 返回结果:逻辑视图 Str ...
- 易课寄在线购课系统开发笔记(二十八)--完成用户注册功能
用户注册 功能分析 请求的 url:/user/register 参数:表单的数据:username.password.phone.email 返回值:JSON 数据.ECoursesResult 接 ...
- 校友会小程序开发笔记二十九:小程序启动性能评测与优化(2)
校友会小程序定位是大量校友的社交类应用,因此对于性能,用户体验,交互体验要求很高,对于小程序的打开,流畅性, 数据的渲染都必须做尽可能的优化 运行时性能 setData setData 是校友会小程序 ...
最新文章
- TensorFlow练习23: “恶作剧”
- 抗住 8 亿人买买买!双 11 背后黑科技大曝光
- 全球知名物联网研究机构预测:2016物联网发展形势
- VMware vSphere 7 服务器ESXi虚拟化HA高可用解决方案
- 使用Java api 和 jni混合方式调用OpenCV
- python中怎么写注释_Python中注释的写法
- Spring @RestController、@Controller区别
- 更新k8s镜像版本的三种方式
- ssm医院疫情隔离室管理系统答辩PPT模板
- 1018. Binary Prefix Divisible By 5可被 5 整除的二进制前缀
- 初识Hadoop(核心组件与应用)
- 传智黑马java基础学习——day13(static、final、匿名对象、内部类、包、修饰符、代码块)
- Unable to start ServletWebServerApplicationContext due to missing ServletWeb解决办法
- 锐捷路由器如何配置虚拟服务器,[路由器自动配置方法技巧] 锐捷路由器配置方法...
- 项目质量管理工具--鱼骨图(石川图)
- CRUD矩阵方法 实例
- 开关电源串模扼流圈、共模扼流圈选择方法
- Python读取本地html文件内容存csv
- DSPE-PEG-Biotin,CAS:385437-57-0,磷脂-聚乙二醇-生物素可延长循环半衰期
- 远程监控 java_JAVA实现远程监控
热门文章
- (转)我从腾讯那“偷了”3000万QQ用户数据,出了份很有趣的独家报告!
- c语言scanf();的输入问题。
- 棉花糖无线点单服务器授权文件,南昌免费无线点菜系统_南昌棉花糖免费餐饮管理系统软件...
- 程序员单干,如何快速打造个人名片?
- Linux命令lsscsi详解
- 莫生气---经典打油诗
- ORACLE视图的修改
- linux run fsck,unexpected inconsistency;RUN fsck MANUALLY 解决方案
- 华为2016校园招聘上机笔试题
- 【名士点金】【金价强势未改 下一 目标在接近】