java: interceptor de Springboot, procesamiento de clase de excepción y base relacionada con el temporizador

Conceptos básicos relacionados con el interceptor Springboot, la clase de excepción y el temporizador

El interceptor se utiliza para interceptar controllerla ruta de acceso, falselo que indica que la interceptación truesignifica 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:
inserte la descripción de la imagen aquí
la prueba 01 está bloqueada:
inserte la descripción de la imagen aquí


Las excepciones personalizadas Exceptionse 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:
inserte la descripción de la imagen aquí


定时器: 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:
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_45686583/article/details/115332617
Recomendado
Clasificación