一、Java日志体系
1、Java日志体系介绍
2、日志级别
3、SpringBoot 日志实现
a、日志实现
想要打印谁的日志,就在后面配谁的包。
然后运行项目,就会自动打印日志:
b、输出日志到文件中
也可以输出到文件中:
4、日志配置
a、文档理论
b、操作
效果:
二、SpringBoot 整合 Shiro
1、 前期准备
只是 shiro 的话,只需要选 web 依赖即可。
新加依赖:
2、编写登录验证
项目结构:
登录方式以前很相似,而且还比以前简单:
然后 realm:
接着配置文件(配置拦截规则那些):
还有些其他配置:
三、SpringSecurity
1、介绍
依赖导入:
与 Shiro 的区别:
2、简单使用
写一个接口,其他什么事都不做,跑起来看看:
结果:
可以看到需要输入密码才能接口访问:这是因为接口统统都被保护取来了。
默认的用户名是:user
密码是,看截图:
项目会自己输出密码。
当然也可以自定义用户名和密码:
当然,也可以在 java 配置文件里面写:
在用 shiro 的时候,密码想加密就加密,不想加密就不想加密。在 Security 里面,密码是强制加密的。这里去掉了密码加密。
当然,也有另外一种定义方法:
3、接入 MySQL 数据库
a、前期准备
b、接入 MySQL
SpringSecurity 可以自动的从 User 对象里面获取用户名和密码,但是每个人都可能起不同的名字,用法,框架怎么知道呢?既然要融合到框架里面去,就需要一个规范的接口:
先定义这个 User 实体类(至少这四个属性必须得有):
然后实现这几个方法:
然后就是一个 get 方法和几个 set 方法:
接着就是 service 层实现接口:
就这就是 mapper 层查询。
最后就是:
然后到此就搞定了。接着访问接口,就能根据对应的数据库查找出用户名和密码,然后就能成功登录。
4、SpringSecurity自定义登录表单
虽然框架提供了登录页面,但是正常来说,登录页面都是自定义的。
a、配置登录详情
还有就是关于跳转:
登录成功:
b、关闭 csrf
在刚刚的页面中,已经有了抵御 csrf 的攻击。
需要先暂时关闭,才能登录成功:
如果就这样访问页面,会失败:
因为前面配置了访问任何都需要认证,但是登录页面是不需要认证的:
5、密码加密
a、推荐的密码加密
密码加密的重要性不用说也知道。在 SpringSecurity 里面密码加密变的很简单了,也不用在数据库中设置盐字段,SpringSecurity 会自动的帮我们处理。
SpringSecurity 里面推荐我们使用的加密工具是 :
结果:
可以发现同样是 123,密文都不一样。
然后密码比对代码需要改:
哪怕数据库中 10 个用户密码都是123,但是密文不一样,也是可以成功登录的。
注意:虽然推荐的是 BCryptPasswordEncoder ,但是不能不填这个,因为默认的不是这个。
b、默认的密码加密
默认的是这个:
查看其源码,可以知道里面有个 map,存了所有的密码加密方案:
密码加密方案:
默认使用的就是这个玩意:
这个代理有个好处就是允许在同一个项目里面,同时出现多种加密方案。 因为如果去兼容老项目,老项目就可能有不同的加密方案,甚至有不加密的。
那么怎么知道加密还是不加密呢?
如果不加密,则前缀会带 noop,如果是加密的,前缀带 bcrypt:
比如这样:
可以看到不加密显示的是明文。
那么这个时候,密码比对就不能用以前那个,直接不配对:
用这个,就要求密码需要有前缀。就算所有密码都用一个加密方案,也必须要有前缀。不需要手动加前缀!
由于是系统默认的加密方案,所以不需要写就是这种加密方案。下图是在测试代码中演示输出的密码带前缀。
这么写,就不需要手动加前缀了,自行测试即可。
6、密码升级
SpringSecurity 密码加密自带密码升级的功能。
比如跟老旧系统合并的时候,如果密码没有加密,肯定是不安全的。自动升级就是用户登录的时候,如果密码是不安全的,就会自动升级为那种密文的形式。 ;如果安全的是加密20次,不安全的是 10 次,那么也会升级为这种 20 次的。
只要实现一个接口就有这种功能:
mapper 层:
到此就完成了。