Springboot的日志
默认日志框架:logback
1.日志以文件的形式的保存 使用logback框架 ->(运行日志,开发中用于调式的,在开发中作为系统运行日志记录故障,从而追究问题根源)
2.日志相关的表 记录用户相关操作信息 -> 需要我们去处理 -> 作为系统功能存在
日志配置:
SpringBoot默认日志输出目的地: console(控制台)
在生产环境,日志肯定不是在控制台
设置日志输出目的地:文件
问题:
这个项目所有的日志保存在一个文件,系统运行越久,日志文件中内容越多,打开越慢,找特定日期的日志文件困难解决方案:
每一天产生一个日志文件,根据每个日志文件级别单独再创建一个文件
想实现解决方案效果,默认配置无法实现
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
如果logback的配置文件:不是logback-spring.xml,logback-test.xmL,logback.xml可以在SpringBoot全局配置文件: application.yml指定配置文件
注意:
logback配置文件名: logback-logback.xml不能使用
SpringBoot中过滤器和拦截器的应用
过滤器
过滤器的实现:
1. javaWeb实现:实现javax.servlet.Filter接口 如果设置拦截方式为forward,默认面定向拦截
2. Spring对Filter接口进行再次封装:OncePerRequestFilter抽象类,Spring框架推荐使用
OncePreRequestFilter : 只对该请求进行一次过滤
AFilter拦截方式:重定向方式拦截,转发拦截
localhost:8080/hello 可以访问 不会拦截此时 因为拦截会打印AFilter......
过滤器的配置方式:
1.使用@WebFilter注解(javaWeb的注解),配置过滤器,使用@ServletComponentScan扫描web注解.
.
.
.
.注释AFilter
AFilter再转发中拦截了两次 BFilter是另一种方式,是继承了OncePerRequestFiter这种方式
.继承OncePreRequestFilter,一-次请求只拦截一次
.
.
改变过滤器1拦截顺序:
1.使用@WebFilter配置,指定过滤器执行顺序,修改类名,根据类名顺序
2.使用Springboot提供的配置类方式配置: FilterRegistrationBean类,专门用于注册过滤器
方法二:(解决之前JavaWeb中所没有的指定过滤方法的缺陷)
提供setOrder()指定过滤器执行顺序,数字越小,越先执行
JavaWeb的配置类
@Bean
public FilterRegisterationBean<AFilter> aFilterRegisterationBean(){
new
}
拦截器
使用配置类进行配置
WebMvcConfigurer接口是SPringboot提供给开发者对SpringMvc的配置扩展
登录成功->得到token
带回服务器 防止伪造token ->
token
拦截处理判断
登录的重定向解决
ajax发送的请求!!!!!
跳转由前端来处理 下面这种方式是不对的
token从session里拿
Q1主界面 详情界面不是可以直接访问的,需要登录 直接访问会因为没有携带token导致允许都无法访问
Q2拦截ajax请求 没有token response重定向跳转到login.html 前端需要数据 前端实现跳转
解决方案:不让用户直接通过url访问主界面和详情界面
我可以提供一个处理器controller来让用户进行访问
HtmlController.java
@RequestMapping("test")
public String toindex(){return "forward:/index.html"}
Q2:
拿到请求头里的东向来进行区分
ajax没有token下的失败 过滤器会拦截 根据header里的状态判断是否拦截
手动响应json