1.常见的加密方式?
可逆的加密方式:加密之后可以进行反向解密
对称加密:加密解密使用同一个密钥
优点:算法公开、性能好、速度快
缺点:没有非对称加密安全性好
场景:项目中的参数加密可以使用
非对称加密:使用前 先生成私钥和公钥,如果使用私钥加密,可以使用公钥进行解密
如果使用公钥加密,可以使用私钥进行解密
优点:两把钥匙,安全性要好一些
缺点:性能差
场景:第三方调用,参数签名,防止参数被篡改,保证参数安全
不可逆的加密方式:
MD5加密:加密后不可解密(但是一些简单的密码还是可以被破解的)
所以项目中我们一般使用:MD5+salt(加盐:随机生成的混淆字符串)
2.什么是无状态登录?
用户在登录后,后端不维护用户的信息,只是颁发token凭证即可
3.什么是JWT Token?
JWT Token叫做:JSON Web token(格式以JSON为主)
主要有三部分:
header:头信息 {"token类型":"","加密方式":""}
payload:载荷信息(主要存储数据的地方) {"自定义的json数据"}
signature:签名信息 【(对头信息进行base64的编码处理+“.”+载荷信息的base64的编码处理),然后利用头信息里面的加密方式,把两段内容进行一个加密】
4.如何保证token令牌不被篡改?
通过签名:signature进行保证
5.token令牌能否保证数据安全?
token是一门认证技术,不是为了保证数据安全的
token中尽量不要存储敏感信息
token + https
6.项目中是如何进行登录认证的?
前端所有的请求都需要经过网关路由到微服务,我们在网关准备了一个全局过滤器,用于登录认证
网关过滤器的基本流程:
1.获取请求的路径
2.判断路径是否为白名单路径
如果是白名单路径直接放行请求(比如:/login/in)
3.如果不是白名单路径的话,检查用户请求头中是否携带token
如果没有token,直接终止请求返回401未认证
4.如果携带了token,使用JWT工具类,解析token,判断是否有效
如果无效,直接终止请求返回401未登录成功
如果有效,获取token中存储的用户信息,将用户id设置到header中路由给其他微服务
网关具体实现:
实现 GlobalFilter接口 再里面 实现filter方法,方法里面有两个参数:exchange,chain
如果用户没登录,经过网关过滤器拦截,返回401未认证通过状态,前端会跳转到登录页面,在登录页面输入 用户名和密码完成登录
登录的基本流程
1.根据用户名查询用户
2.判断用户的状态是否正常
3.对比输入的密码和用户的密码是否一致(MD5 + salt)
4.颁发token 使用的是JWT工具类中的.getToken(id)
7.请介绍下用户实名认证模块的业务流程?
业务描述:
app用户 要想成为自媒体用户,需要先进行实名认证,实名认证需要提交:身份证正面照片、反面照片、活体检测照片、手持身份证照片提交到后台,运营人员可以在后台用户审核模块中对该信息进行审核。审核通过:为该用户开通自媒体账户,并创建一个作者信息。
涉及的库表:
leadnews-user app用户库:ap_user app用户表 ap_user_realname 实名认证表
leadnews-wemedia 自媒体库: wm_user 自媒体用户表
leadnews-article 文章库: ap_author 作者信息表
具体流程:
1.根据实名认证id查询实名认证信息
2.判断状态是否为 待审核
3.根据前端操作将审核状态修改为 2(失败)或9(通过)
4.如果是审核通过
远程开通自媒体账户
远程开通作者信息
8.Feign的作用?
实现微服务之间的http调用
9.Hystrix的作用?
服务降级:为微服务的调用,准备一个兜底的策略。如果调用失败,可以走兜底策略,不至于报异常
再兜底的策略里服务降级可以返回:一个默认值、友好的错误提示、备用的方案等
10.项目中Feign的具体使用?
Feign的工程搭建:
1.引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.在配置类中开启Feign的扫描注解:@EnableFeignClients(basePackages = "com.heima.feigns")
扫描的包就是Feign接口所在的包
3.然后想调哪个微服务就为哪个微服务创建一个接口,接口上写上注解
@FeignClient(value = "leadnews-article",
fallbackFactory = ArticleFeignFallback.class,
configuration = HeimaFeignAutoConfiguration.class)