专栏首页好好学java的技术栈完美实现SpringBoot+Angular普通登录

完美实现SpringBoot+Angular普通登录

重磅资讯、干货,第一时间送达今日推荐:2020,搞个 Mac 玩玩!个人原创+1博客:点击前往,查看更多
作者:LYX6666
链接:https://segmentfault.com/a/1190000021873471

本文基于《SpringBoot+Angular入门实例教程》第5.1节的内容理解并简化而来。本文的目的浅析前后台分离的普通登录数据流。

一、基本问题

简图如下:

数据流

SpringBoot+Angular的数据流,请参考我的上一篇SpringBoot+Angular前后端分离的数据流浅析。

简而言之:C层负责数据转发, M层(Service服务层)负责具体的数据处理和发出请求, 前台的V层是页面模板,负责组件渲染 后台的仓库层负责和数据库直接对话 前台的实体、后台的实体和数据库的字段一一对应。

前后台的分工?

在这个登录功能中,后台唯一的作用就是只做数据验证。当用户登录时,前台向后台发起用户名、密码验证的请求,如果后台验证成功,就返回真,否则返回假。当前台接收到返回值后,再判断用户是否登录成功。

登录状态保存在哪?

一开始,可以保存在app组件中,然后V层使用ngIf直接获取C层变量就可以获取登录状态,但是依赖登录状态的

登录状态储存在前台的服务层的一个变量中,所有的组件在渲染前都去找这个登录服务要数据,如果用户处于登录状态,就正常跳转,否则跳转到登录页。

登录和注销动作

初始化时,登录状态为假。登录时,如果后台返回值是真,就把登录状态变量改为真,否则不变。注销是,只需把登录状态改为假,即可。

二、详解登录注销过程

登录

图片.png

  1. 用户提交Form表单,触发C层onSubmit()方法
  2. C层调用服务的Login()方法
  3. teacher服务向后台发起Http请求,传入用户名和密码
  4. 后台C层调用M层Login方法,传入用户名密码
  5. 后台M层调用仓库findByUsername方法,传入Username
  6. 后台仓库使用SQL从数据库中去除对象,并返回给M层
  7. 后台M层调用ValidatePassword把仓库返回的用户密码和C层传入的密码比较,如果一致就返回True
  8. 后台C层把布尔值返回给前台
  9. 前台teacher服务层把接受的布尔值返回给C层
  10. 前台C层判断返回的数据是否为真,若为真,就调用M层setLogin方法,把登录状态修改为1
  11. 前台C层返回,跳转对应的界面

跳转

图片.png

  1. 浏览器输入Url触发方法,生成组件
  2. C层向Teacher服务订阅登录组件
  3. C层获取登录状态isLogin$并赋值给本类的islogin
  4. V层渲染页面,根据C的登录状态来决定显示那些内容,如果未登录就显示登录页
  5. 把页面返回给浏览器

注销

图片.png

  1. 浏览器触发导航栏C层Logout方法
  2. 导航栏调用M层setIsLogin(flase),把登录状态改成0
  3. M层返回
  4. 把登录页返回给浏览器

三、合并图片

图片.png

四、存在的问题

当前的所有验证都只是在前台,后台没有任何验证,用户无需认证便可以通过浏览器或是其它的REST工具对后台进行肆意操作。一个形同虚设的登录功能只是挡住了一些正常的用户,但对一些非法用户的入侵却毫无防范。甚至于后台根本就没有能力判断是谁正在进行数据请求,权限控制当然也就无从谈起。本文的图片只是解释了教程中的逻辑,使教程更容易理解,所以更好的方式还是使用安全性更高的token令牌机制。

教程源码:https://github.com/mengyunzhi/spring-boot-and-angular-guild/releases/tag/step5.1.6

本文分享自微信公众号 - 好好学java(SIHAIloveJAVA)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringMVC+RestFul详细示例实战教程(实现跨域访问)

    **REST(Representational State Transfer)**,中文翻译叫“表述性状态转移”。是 Roy Thomas Fielding 在...

    好好学java
  • 终于有人把Java内存模型讲明白了,建议收藏!

    《深入理解 Java 内存模型》程晓明著,该书在以前看过一遍,现在学的东西越多,感觉那块越重要,于是又再细看一遍,于是便有了下面的读书笔记总结。全书页数虽不多,...

    好好学java
  • 如何设计第三方账号登陆 ?

    链接 | juejin.im/post/5d0a298bf265da1b827aa06f

    好好学java
  • 新能力丨报告,邮箱登录已支持!

    小程序端、Web端、移动端......无论来自哪端的应用,想要正常运转,都离不开用户登录鉴权这一步骤。云开发作为国内领先的云原生一体化应用开发平台,为小程序、W...

    腾讯云开发TCB
  • 单点登录-基于Redis+MySQL实现单点登录(SSO)

    主要便于公司内部多系统统一认证授权管理,一次登录可访问多个跨域系统,也同时更加方便统一管理用户登录(员工离职需要拿掉登录权限、统计所有用户对系统的登录请求)。

    秋日芒草
  • 管理后台的登录功能-重新思考

    每个网站、APP都几乎必然有其管理后台,其中管理的内容则是公司的核心技术财产。而登录模块则是这扇大门,其安全的重要性可想而知。我们知道,功能越多,安全性就会越低...

    公众号php_pachong
  • Xshell 登录 AWS CentOS 出现“所选择的用户秘钥未在远程主机上注册“,最终解决办法!

     其实就是 登录用户名错了,是 root,不是centos 也不是 ec2-user !  Xshell 连接配置界面如下 ? 最重要是 登录授权配置 ?  最...

    庞小明
  • laravel 5.3 单用户登录简单实现方法

    当前用户只能在一个地方登录,即同一账号不能再2个以上窗口登录,后登录者踢出前登录者。

    砸漏
  • Linux登录那点事

    跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 我们登录linux的时候基本上不太关注...

    逸鹏
  • 十四、social_django 集成第三方登录

    对于template中的用法,向context_processors中加入下面两个

    Freshman

扫码关注云+社区

领取腾讯云代金券