用户登录

功能分析

请求的 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;
}

易课寄在线购课系统开发笔记(二十九)--完成用户登录功能相关推荐

  1. 易课寄在线购课系统开发笔记(二十五)--完成课程详情页面展示相关功能(应用Redis缓存)

    课程详情页面展示 创建一个课程详情页面展示的工程,是一个表现层工程. 工程搭建 ecourses-item-web.打包方式 war. 可以参考 易课寄在线购课系统开发笔记(七)–后台管理系统工程搭建 ...

  2. 易课寄在线购课系统开发笔记(十五)--完成购课系统门户的工程搭建

    购课系统门户首页 工程搭建 可以参考 易课寄在线购课系统开发笔记(七)–后台管理系统工程搭建分析 ecourses-bms-web 工程的搭建过程. 功能分析 请求的 url:/index web.x ...

  3. 易课寄在线购课系统开发笔记(三十三)--完成购物车系统的开发

    购物车的实现 功能分析 1.购物车是一个独立的表现层工程: 2.添加购物车不要求登录,可以指定购买课程的数量: 3.展示购物车列表页面: 4.修改购物车课程数量: 5.删除购物车课程. 工程搭建 ec ...

  4. 易课寄在线购课系统开发笔记(十六)--完成内容服务系统的工程搭建

    首页动态展示分析 内容信息要从数据库中获得. 动态展示分析 内容需要进行分类. 分类下有子分类,需要动态管理. 分类下有内容列表. 单点的内容信息: 有图片 有链接 有标题 有价格 包含大文本类型,可 ...

  5. 易课寄在线购课系统开发笔记(三)--数据库设计

    概念结构设计 ER 图如图所示. 表的详细设计 通过对领域对象.业务对象及对象间关联的分析,对本系统的数据库表进行了设计.本系统数据库管理采用 MySQL. 管理员信息表 ( ecourses_adm ...

  6. 易课寄在线购课系统开发笔记(十一)--完成课程列表查询的功能

    展示后台首页 功能分析 请求的url:/ 参数:无 返回值:逻辑视图String Controller package cn.ecourses.controller; //页面跳转Controller ...

  7. 易课寄在线购课系统开发笔记(三十一)--登录注册页面实现

    登录注册页面实现 注册功能 第一步:把静态页面添加到工程中. 第二步:展示页面. 请求的url: 登录:/page/login 注册:/page/register 参数:无 返回结果:逻辑视图 Str ...

  8. 易课寄在线购课系统开发笔记(二十八)--完成用户注册功能

    用户注册 功能分析 请求的 url:/user/register 参数:表单的数据:username.password.phone.email 返回值:JSON 数据.ECoursesResult 接 ...

  9. 校友会小程序开发笔记二十九:小程序启动性能评测与优化(2)

    校友会小程序定位是大量校友的社交类应用,因此对于性能,用户体验,交互体验要求很高,对于小程序的打开,流畅性, 数据的渲染都必须做尽可能的优化 运行时性能 setData setData 是校友会小程序 ...

最新文章

  1. TensorFlow练习23: “恶作剧”
  2. 抗住 8 亿人买买买!双 11 背后黑科技大曝光
  3. 全球知名物联网研究机构预测:2016物联网发展形势
  4. VMware vSphere 7 服务器ESXi虚拟化HA高可用解决方案
  5. 使用Java api 和 jni混合方式调用OpenCV
  6. python中怎么写注释_Python中注释的写法
  7. Spring @RestController、@Controller区别
  8. 更新k8s镜像版本的三种方式
  9. ssm医院疫情隔离室管理系统答辩PPT模板
  10. 1018. Binary Prefix Divisible By 5可被 5 整除的二进制前缀
  11. 初识Hadoop(核心组件与应用)
  12. 传智黑马java基础学习——day13(static、final、匿名对象、内部类、包、修饰符、代码块)
  13. Unable to start ServletWebServerApplicationContext due to missing ServletWeb解决办法
  14. 锐捷路由器如何配置虚拟服务器,[路由器自动配置方法技巧] 锐捷路由器配置方法...
  15. 项目质量管理工具--鱼骨图(石川图)
  16. CRUD矩阵方法 实例
  17. 开关电源串模扼流圈、共模扼流圈选择方法
  18. Python读取本地html文件内容存csv
  19. DSPE-PEG-Biotin,CAS:385437-57-0,磷脂-聚乙二醇-生物素可延长循环半衰期
  20. 远程监控 java_JAVA实现远程监控

热门文章

  1. (转)我从腾讯那“偷了”3000万QQ用户数据,出了份很有趣的独家报告!
  2. c语言scanf();的输入问题。
  3. 棉花糖无线点单服务器授权文件,南昌免费无线点菜系统_南昌棉花糖免费餐饮管理系统软件...
  4. 程序员单干,如何快速打造个人名片?
  5. Linux命令lsscsi详解
  6. 莫生气---经典打油诗
  7. ORACLE视图的修改
  8. linux run fsck,unexpected inconsistency;RUN fsck MANUALLY 解决方案
  9. 华为2016校园招聘上机笔试题
  10. 【名士点金】【金价强势未改 下一 目标在接近】