12-1 Springboot过滤拦截和日志处理

Springboot的日志

默认日志框架:logback

1.日志以文件的形式的保存 使用logback框架 ->(运行日志,开发中用于调式的,在开发中作为系统运行日志记录故障,从而追究问题根源)

2.日志相关的表 记录用户相关操作信息 -> 需要我们去处理  -> 作为系统功能存在

日志配置:

SpringBoot默认日志输出目的地: console(控制台)

在生产环境,日志肯定不是在控制台

设置日志输出目的地:文件
 

12-1 Springboot过滤拦截和日志处理_第1张图片

问题:
这个项目所有的日志保存在一个文件,系统运行越久,日志文件中内容越多,打开越慢,找特定日期的日志文件困难

解决方案:

每一天产生一个日志文件,根据每个日志文件级别单独再创建一个文件

想实现解决方案效果,默认配置无法实现

logback框架允许我们编写配置文件:推荐使用xml

logback运行流程:
1. logback会在类路径下寻找名为logback-test.xml的文件
2。如果没有找到,logback会继续寻找名为logback.groovy的文件

3.如果没有找到,logback会继续寻找名为logback.xml的文件

4.如果没有找到,将会在类路径下寻找文件META-INFO/services/ch.qos.logback.classic.spi.Configurator,该文件的内容为实现了Configurator接口的实现类的全限定类名
5.如果以上都没有成功,logback会通过BasicConfigurator为自己进行配置,并且日志将会全部在控制台打印出来

SpringBoot加载logback的配置文件默认默认会加载classpath:logback-spring.xml或者classpath:logback-spring.groovy或者:classpath:logback.xml或者: classpath: logback-test.xml

12-1 Springboot过滤拦截和日志处理_第2张图片

如果logback的配置文件:不是logback-spring.xml,logback-test.xmL,logback.xml可以在SpringBoot全局配置文件: application.yml指定配置文件

12-1 Springboot过滤拦截和日志处理_第3张图片

注意:
logback配置文件名: logback-logback.xml不能使用

SpringBoot中过滤器和拦截器的应用

过滤器

过滤器的实现:
1. javaWeb实现:实现javax.servlet.Filter接口  如果设置拦截方式为forward,默认面定向拦截
2. Spring对Filter接口进行再次封装:OncePerRequestFilter抽象类,Spring框架推荐使用

OncePreRequestFilter :  只对该请求进行一次过滤

12-1 Springboot过滤拦截和日志处理_第4张图片

AFilter拦截方式:重定向方式拦截,转发拦截

12-1 Springboot过滤拦截和日志处理_第5张图片

localhost:8080/hello    可以访问   不会拦截此时  因为拦截会打印AFilter......

过滤器的配置方式:
1.使用@WebFilter注解(javaWeb的注解),配置过滤器,使用@ServletComponentScan扫描web注解

.12-1 Springboot过滤拦截和日志处理_第6张图片

.12-1 Springboot过滤拦截和日志处理_第7张图片

.

.12-1 Springboot过滤拦截和日志处理_第8张图片

.注释AFilter

AFilter再转发中拦截了两次  BFilter是另一种方式,是继承了OncePerRequestFiter这种方式

.继承OncePreRequestFilter,一-次请求只拦截一次

.

.

改变过滤器1拦截顺序:

1.使用@WebFilter配置,指定过滤器执行顺序,修改类名,根据类名顺序

2.使用Springboot提供的配置类方式配置: FilterRegistrationBean类,专门用于注册过滤器

方法二:(解决之前JavaWeb中所没有的指定过滤方法的缺陷)

提供setOrder()指定过滤器执行顺序,数字越小,越先执行

12-1 Springboot过滤拦截和日志处理_第9张图片

JavaWeb的配置类

@Bean

public  FilterRegisterationBean  aFilterRegisterationBean(){

        new 

}

12-1 Springboot过滤拦截和日志处理_第10张图片

12-1 Springboot过滤拦截和日志处理_第11张图片

12-1 Springboot过滤拦截和日志处理_第12张图片

12-1 Springboot过滤拦截和日志处理_第13张图片

拦截器

12-1 Springboot过滤拦截和日志处理_第14张图片

使用配置类进行配置

12-1 Springboot过滤拦截和日志处理_第15张图片

WebMvcConfigurer接口是SPringboot提供给开发者对SpringMvc的配置扩展

12-1 Springboot过滤拦截和日志处理_第16张图片

12-1 Springboot过滤拦截和日志处理_第17张图片

12-1 Springboot过滤拦截和日志处理_第18张图片

登录成功->得到token

12-1 Springboot过滤拦截和日志处理_第19张图片

带回服务器  防止伪造token -> 

12-1 Springboot过滤拦截和日志处理_第20张图片

token

12-1 Springboot过滤拦截和日志处理_第21张图片

拦截处理判断

12-1 Springboot过滤拦截和日志处理_第22张图片

12-1 Springboot过滤拦截和日志处理_第23张图片

12-1 Springboot过滤拦截和日志处理_第24张图片

12-1 Springboot过滤拦截和日志处理_第25张图片

12-1 Springboot过滤拦截和日志处理_第26张图片

12-1 Springboot过滤拦截和日志处理_第27张图片

12-1 Springboot过滤拦截和日志处理_第28张图片

12-1 Springboot过滤拦截和日志处理_第29张图片

登录的重定向解决

ajax发送的请求!!!!!

跳转由前端来处理  下面这种方式是不对的

token从session里拿

12-1 Springboot过滤拦截和日志处理_第30张图片

Q1主界面 详情界面不是可以直接访问的,需要登录  直接访问会因为没有携带token导致允许都无法访问

Q2拦截ajax请求 没有token response重定向跳转到login.html 前端需要数据 前端实现跳转

解决方案:不让用户直接通过url访问主界面和详情界面

我可以提供一个处理器controller来让用户进行访问

HtmlController.java

@RequestMapping("test")

public String toindex(){return "forward:/index.html"}

12-1 Springboot过滤拦截和日志处理_第31张图片

12-1 Springboot过滤拦截和日志处理_第32张图片

Q2:

12-1 Springboot过滤拦截和日志处理_第33张图片

拿到请求头里的东向来进行区分

12-1 Springboot过滤拦截和日志处理_第34张图片

12-1 Springboot过滤拦截和日志处理_第35张图片

12-1 Springboot过滤拦截和日志处理_第36张图片

12-1 Springboot过滤拦截和日志处理_第37张图片

12-1 Springboot过滤拦截和日志处理_第38张图片

ajax没有token下的失败   过滤器会拦截  根据header里的状态判断是否拦截

12-1 Springboot过滤拦截和日志处理_第39张图片

12-1 Springboot过滤拦截和日志处理_第40张图片

手动响应json

12-1 Springboot过滤拦截和日志处理_第41张图片

你可能感兴趣的:(springboot,spring,boot,后端,java)