Conceptos básicos relacionados con el interceptor Springboot, la clase de excepción y el temporizador
El interceptor se utiliza para interceptar
controller
la ruta de acceso,false
lo que indica que la interceptacióntrue
significa liberación.
Configuración del interceptor:
package cn.zbw.interceptor;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class UserLoginInterceptor implements HandlerInterceptor{
@Override
// 拦截的方法 可以拦截controller中被访问的路径
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截器拦截了。。。。");
// false表示拦截 true代表放行
return false;
}
@Override
// 表示:Controller中的方法被渲染之前执行(preHandle返回true才会执行)
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
}
Interceptor de inicio de sesión simple:
package cn.zbw.interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
// 登录拦截器配置
@Configuration
public class UserLoginInterceptorConfig implements WebMvcConfigurer {
// @Autowired 根据类型注入
@Resource // 根据名称注入 (第一种)
private UserLoginInterceptor userLoginInterceptor;
// 第二种
// @Bean
// UserLoginInterceptor getUserLoginInterceptor(){
// return new UserLoginInterceptor();
// }
// 添加拦截器或者注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(userLoginInterceptor)
.addPathPatterns("/test01") // 拦截路径
.excludePathPatterns("/test02") // 放行路径
.excludePathPatterns("/read");
WebMvcConfigurer.super.addInterceptors(registry); // 注册拦截器
}
}
Pruebas de controlador:
package cn.zbw.controller;
import cn.zbw.utils.ReadConfig;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class UserLoginController {
@Resource
private ReadConfig readConfig;
@RequestMapping("test01")
public String test01(){
return "test01被拦截";
}
@RequestMapping("test02")
public String test02(){
// System.out.println(1/0);
return "test02被放行";
}
@RequestMapping("read")
public ReadConfig read(){
return readConfig;
}
}
El resultado es:
la prueba 02 está permitida:
la prueba 01 está bloqueada:
Las excepciones personalizadas
Exception
se devuelven a la página.
Excepción personalizada:
package cn.zbw.exec;
public class Exception extends RuntimeException {
private Integer code; // 错误码
private String msg; // 异常信息
public Exception(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
Clase de configuración de excepción:
package cn.zbw.exec;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
// 异常的配置类
@RestControllerAdvice // 返回json数据
// @ControllerAdvice // 返回到页面
public class ExceptionConfig {
// 当前方法用于处理异常信息(第一种)
@ExceptionHandler(Exception.class)
public Object handlerExceptionMsg(Exception e){
// 方法名字可以根据自己命名
if (e instanceof Exception){
return "自定义异常";
}else {
return "其他异常";
}
}
// 第二种方法
// @ExceptionHandler(Exception.class)
// public ModelAndView handlerExceptionMsg(Exception e, HttpServletRequest request){
// ModelAndView modelAndView = new ModelAndView();
// modelAndView.addObject("msg1",e.getMessage());
// modelAndView.addObject("msg2",request.getRequestURL());
// modelAndView.setViewName("error.html"); // 发送到错误页面
// return modelAndView;
// }
}
Prueba simple del controlador:
@RequestMapping("test02")
public String test02(){
System.out.println(1/0);
return "test02被放行";
}
apagar:
定时器
: clase de tarea cronometrada El llamado cronometraje: realizar una tarea especial
Tarea de tiempo:
package cn.zbw.task;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
// 定时器
// 定时任务类 所谓定时:执行某个特殊任务
@Component
public class TaskDemo {
// 开始定时任务
@Scheduled(cron = "*/8 * * * * * ") // *秒 *分 *时 *日 *月 *一周的某个日子
public void task(){
// localDateTime 用于代替 simpleDateFormat
System.out.println(LocalDateTime.now()+"定时器开始执行了");
}
}
Clase de configuración:
@EnableScheduling // 开启定时任务
apagar: