V4 --->大版本总结
创建一个新的工程步骤
01 创建一个新的空工程
02 配置jdk
03 compiler ---> Build project automatic以及下面两个打钩
04 配置maven 如果不想每次都弄, 去设置里file-->new file settings-
-->settings for new project
maven本地仓库不想每次都创建, 先创建一个文件夹(系统中,别有中文) 修改settings.xml
[现在使用的版本是maven3.6.3]
Git操作
Gitee插件的安装
直接分享到本地仓库,步骤如之前文章所示
将以下配置放入git的全局配置文件中
将如下内容拷贝到.git/info目录下的exclude文件中
(这个文件是一个git全局配置文件,用于配置哪些资源不存储到本库,默认隐藏)
=========================================>>>>>>
HELP.md
target/
out/
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
.gitignore
### maven ###
mvnw
*.cmd
.mvn/
=========================================>>>>>>>>>
其他bug 请看 V4 2104
内容略了~~~
// ========== 安全框架 ============
主流的有两种SpringSecurity,Shiro(不会)
点击文章跳转学习Shiro:-------->>> V4-- Apache Shiro 安全框架 <<<----------
Spring Security(会)
1. 安全框架底层构建了大量的过滤器
2. spring-boot-starter-security依赖springboot的
3. 最开始控制台会输出一个令牌(登录密码) 访问设置的8080端口会看到登录页面
注意: 登录页面时需要在resource/static包下创建index.html文件 没有自己创建
通过配置文件在yml进行配置密码 '{bcrypt}'指定了密码加密时使用的算法
缺点: 用户信息变更困难
自定义登录逻辑
@Configuration注解
由@Configuration注解描述的类为spring中的配置类,配置类会在spring
工程启动时优先加载,在配置类中通常会对第三方资源进行初始配置
定义一个security的配置类,然后实现userDetailsService
交给bean处理 bcrypt----> @Autowired
最后会变化为auth认证处理器sso中的重要一环 用来创建并解析令牌
系统会话状态分析和实践
cookie和session
有状态的会话实现缺点:
在分布式架构中可能会存在很多问题,例如浏览器默认不支持携带其它域的Cookie信息进行资源访问,同时服务端的Session默认不能共享。
当然我们有一种方式可以将session持久化到到一些数据库,例如Redis,下次请求到其它服务器(例如tomcat)时,可以直接从redis中获取登录信息,但是假如并发比较大,数据库的访问压力就会剧增,压力太大有可能会导致系统宕机。
所以现在还有一种方案就是将用户的登录状态信息都存储在客户端,服务端不记录任何状态,服务端只负责对客户端传递过来的状态信息进行解析,基于此方式进行用户登录状态的判断,这样的会话过程称之为无状态会话.
--------------------------------------------------------------
jwt技术分析和实践
1. jwt背景
session 传统的有状态服务应用中, 服务器需要每次都记录会话的客户端信息,
从而识别客户端身份(Tomcat中的session) 用户登录后需要将信息存到session中
给客户一个cookie 记录当前的session 客户再次请求 携带cookie(浏览器自动)
但是 分布式系统中,服务端不适合保存用户状态, 所以jwt(无状态传输最好)
2. jwt 全称: json web token json格式作为web应用请求中的令牌
jwt跨域身份验证, 方便在分布式系统中实现身份认证
base64URL算法转换字符串
三部分组成 Header(头部),PayLoad(负载),Signature(签名)
***.***.***
01 头部 json对象 描述jwt元数据
02 负载 用来存放实际需要传递的数据, 官方规定七个字段(可以自定义)
其中 sub(主题),exp(过期时间),nbf(生效时间),issur(签发人)
这块不是加密的, 不要把密码信x
03 signature部分
Signature是前两部分的签名,其目的是防止数据被篡改
指定一个秘钥给服务器(不能让用户知道)
然后使用header里面指定的签名算法(HMAC SHA256)
依赖jjwt