0
点赞
收藏
分享

微信扫一扫

SpringBoot(八)——Java日志体系(日志实现)、整合 Shiro、SpringSecurity(简单使用、接入 MySQL 数据库、自定义登录表单、密码加密、密码升级)

独孤凌雪 2022-02-17 阅读 72

一、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 层:
在这里插入图片描述
到此就完成了。

举报

相关推荐

0 条评论