Spring cloud微服务安全实战-3-4 API安全机制之认证(1)
本节开始讲认证相关的东西、注意事项,出现问题的对应的解决方案。
先写用户注册的服务,注册一些用户信息进去。注册也是我们安全体系的一部分
注册
UserController里面的create方法
先修改实体类,加上username和password
因为我们已经在配置文件内配置了generate-ddl为true,启动的时候jpa会自动把这两个属性加到数据库里,这样就不用我们自己手动去数据库里加属性。
设置主键的策略,这里设置的是根据当前数据库的类型策略,例如当前是mysql数据库,那么就会按照mysql数据库的策略。自增的字段策略。
@GeneratedValue(strategy = GenerationType.IDENTITY)
strategy
美 ['strætədʒi]
英 ['strætədʒi]
- n.策略;战略;策划;战略部署
- 网络策略模式;谋略;计谋
创建userInfo对象
复制user这个类,改个名字叫做userInfo。
这里把@Entity去掉。因为它不是实体,也就是不和数据库内的表对应。UserInfo用来封装我们服务的请求和响应。
保留@Data注解,这回帮我们生成get和set方法。
UserController里面凡事用到user的地方都改成UserInfo
那么为什么要这么改呢?这两个对象从现在来看,属性是一模一样的,为什么要分成两个呢?这就是编程里面比较常见的一个概念,关注点分离。
也叫做单一职责原则。任何一个类或者方法它应该只关注一个事,或者说只对一个事负责,只有当这个事变化的时候,我才需要改这个类或者这个方法,如果我们用User类来作为Controller的输入或者输出,那么User这个实际上就负责了两件事。第一件事是跟我么的数据库表做映射,这个对象反映出来我们数据库有哪些字段,那个字段是主键等等这些信息,它是负责跟数据库里的表做映射的。
而我们Controoler里面的方法 他的用参和出参实际上是服务的输入和输出。这个实际上是两个概念。 如果我们在这两个关注点上用同一个类。都用User的话,那么User负责的事情就会变多。这个类负责的事情变多就会导致,每一个事变化的时候我都要去改User,就会发生一些问题。
比如数据库结构发生变化的时候,我要去改User,当创建用户或者修改用户的服务发生它的输入和输出发生变化的时候,我也需要去改User
。这个时候User这个类 它的职责就不清晰了。这不是一个好的编程概念。
举个例子,例如用户表里面加一个积分字段。 这个是一个很常见的需求。
如果我加了积分字段,在Controller里面还用User对象作为输入或者输出,就意味着我的注册方法组要的字段里面也多了个积分字段。但是注册的时候,基本没有要求你填写积分信息的吧???所以这就是我们为什么要建这个UserInfo对象的原因。这就是关注点分离。
大家在编程的时候也要注意这一点。它会让你设计出良好的程序。
服务层Service
也就是我们常说的Service层。
在创建Service的实现类
controller层暴露app服务,app服务进来后交给service层,service层再去调用DAO也就是Repository做数据库操作。这样职责就完全区分开了
service层负责实现业务逻辑,Repository专门负责数据库的操作,一般情况下Repository也不会有什么业务逻辑
声明service内的方法。和controller内是对应的
在Service的Impl类里面都 实现这些方法。
把实现类声明称Spring的Service对象,也就是Spring的一个Bean
Controller内调用Service层的方法
写Create方法。使用BeanUtils里面的方法,把传进来的UserInfo对象的值都复制到User这个对象里面。
把user对象保存后的id,复制给info对象,再返回回去。这样前天就能拿到你最终创建的这个用户的id是多少。
这样一个简单的注册就写完了
运行测试
返回的状态码是200。返回的信息就是注册的时候填写的信息,同时还有数据库最终生成的主键自增的id
日志里面打印出了insert语句
数据库内的记录
下面继续写认证的逻辑
先明确几个概念,我们现在讲的是认证,还不是登陆。
认证是验证用户的身份是否合法的这样一个过程。认证这个事 不管 成没成功,它都要往下走。它和登陆不一样。登陆一旦有问题就断掉了。比如说你登陆的时候用户名和填错了。那么我就直接抛异常了,不会再往下走了。认证的时候,如果你传进来的用户身份有问题,仍然要往下走,给下面的审核去记录,记录你这次的身份认证的结果是什么样子的。最终这个请求是不是可以被通过,要由授权来决定。不是由认证来决定的。
明确好了这些概念。就可以写代码。
结束
Spring cloud微服务安全实战-3-4 API安全机制之认证(1)的更多相关文章
- 《Spring Cloud微服务 入门 实战与进阶》
很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的 ...
- Spring Cloud微服务安全实战_00_前言
一.前言: 一直以来对服务安全都很感兴趣,所以就学习.这是学习immoc的 jojo老师的 <Spring Cloud微服务安全实战课程>的笔记,讲的很好. 课程简介: 二.最终形成的架 ...
- Spring cloud微服务安全实战_汇总
Spring cloud微服务安全实战 https://coding.imooc.com/class/chapter/379.html#Anchor Spring Cloud微服务安全实战-1-1 课 ...
- Spring Cloud微服务安全实战_4-5_搭建OAuth2资源服务器
上一篇搭建了一个OAuth2认证服务器,可以生成token,这篇来改造下之前的订单微服务,使其能够认这个token令牌. 本篇针对订单服务要做三件事: 1,要让他知道自己是资源服务器,他知道这件事后, ...
- Spring Cloud微服务安全实战_4-3_订单微服务&价格微服务
实现一个场景: 订单微服务: POM: <?xml version="1.0" encoding="UTF-8"?> <project xml ...
- Spring cloud微服务安全实战 最新完整教程
课程资料获取链接:点击这里 采用流行的微服务架构开发,应用程序访问安全将会面临更多更复杂的挑战,尤其是开发者最关心的三大问题:认证授权.可用性.可视化.本课程从简单的API安全入手,过渡到复杂的微服务 ...
- Spring Cloud微服务安全实战_4-4_OAuth2协议与微服务安全
接上篇文章,在这个流程中,PostMan可以代表客户端应用,订单服务是资源服务器,唯一缺少的是 认证服务器 ,下面来搭建认证服务器 项目结构: Pom.xml : DependencyManager ...
- Spring cloud微服务安全实战-6-8sentinel限流实战
阿里2018年开源的. 简单来说就是干三件事,最终的结果就是保证你的服务可用,不会崩掉.保证服务高可用. 流控 先从最简单的场景来入手. 1.引用一个依赖, 2,声明一个资源. 3.声明一个规则 注意 ...
- Spring cloud微服务安全实战-6-4权限控制改造
授权,权限的控制 令牌里的scope包含fly就有权限访问.根据Oauth的scope来做权限控制, 要让@PreAuthorize生效,就要在启动类里面写一个注解. 里面有一个属性叫做,就是在方法的 ...
- Spring cloud微服务安全实战-6-2JWT认证之认证服务改造
首先来解决认证的问题. 1.效率低,每次认证都要去认证服务器调一次服务. 2.传递用户身份,在请求头里面, 3.服务之间传递请求头比较麻烦. jwt令牌. spring提供了工具,帮你在微服务之间传递 ...
随机推荐
- JDK源码那些事儿之LinkedBlockingDeque
阻塞队列中目前还剩下一个比较特殊的队列实现,相比较前面讲解过的队列,本文中要讲的LinkedBlockingDeque比较容易理解了,但是与之前讲解过的阻塞队列又有些不同,从命名上你应该能看出一些端倪 ...
- cookie,session,token介绍
本文目录 发展史 Cookie Session Token 回到目录 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档 ...
- mui真机调试时无法查找到手机
在做mui的真机调试时手机查找不到手机,有可能是你的 adb interface 驱动 版本过低,先下载 或自行百度 http://www.onlinedown.net/soft/1164054. ...
- 2019红帽杯部分wp
xx 程序首先取输入的前4个字符作为xxtea加密的密钥之后进行xxtea加密.接着进行位置置换操作,然后又进行了以3个为一组的异或 首先逆向解出xxtea加密之后的结果 #include<st ...
- idea-git同步服务器代码后撤销操作
工具:IntelliJ IDEA 2019.2.1 x64 记录一次不小心同步代码后,如何撤销操作. 1.同步服务器代码,右击项目,点击Synchronize 'xxx',如下: 2.打开Versio ...
- laravel-nestedset:多级无限分类正确姿势
laravel-nestedset:多级无限分类正确姿势 laravel-nestedset是一个关系型数据库遍历树的larvel4-5的插件包 目录: Nested Sets Model简介 安 ...
- MySQL 是怎么保证数据一致性的(转载)
在<写数据库同时发mq消息事务一致性的一种解决方案>一文的方案中把分布式事务巧妙转成了数据库事务.我们都知道关系型数据库事务能保证数据一致性,那数据库到底是怎么设计事务这一特性的呢? 一. ...
- $spfa-dfs$优化板子
\(spfa-dfs\)优化板子 快速判断是否存在负环(没负环时不要作死用) bool spfa(int u){ vis[u]=1; for(register int i=head[u];i;i=nx ...
- AtCoder Grand Contest 021题解
传送门 \(A\) 咕咕 ll n,res;bool fl; int main(){ scanf("%lld",&n),fl=1; while(n>9)res+=9, ...
- shell 命令的重命名alias
1.实现别名:alias ddd="df -Th": 2.删除别名:unalias ddd: 3.显示所有别名命令列表:alias: 4.存放位置:~/.bashrc (加入该文 ...