Создайте свою собственную фоновую среду SpringBoot с нуля (19)

Spring Boot Java
Всем привет, в этой главе мы добавляем функцию перехватчика. Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь со мной по адресу mr_beany@163.com. Также попросите руководства великих богов, спасибо

В процессе веб-разработки, чтобы реализовать проверку разрешений на вход в систему, проверку безопасности и т. д., нам часто нужно добавить перехватчик для реализации проверки входа в систему, когда запрос пользователя достигает уровня контроллера, так как же SpringBoot добавляет перехватчик?

Первый: добавить перехватчик

Открытое ядро→конфигуратор→WebConfigurer

добавить следующее

/**
 * TODO  修改为自己的需求
 */
private static final String IZATION = "CHUCHEN";

/**
 * 添加拦截器  请求头拦截
 */
@Override
public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(
            //注意,HandlerInterceptorAdapter  这里可以修改为自己创建的拦截器
            new HandlerInterceptorAdapter() {
                @Override
                public boolean preHandle(HttpServletRequest request,
                                         HttpServletResponse response, Object handler) throws Exception {
                    String ization = request.getHeader("ization");
                    if(IZATION.equals(ization)){
                        return true;
                    }else{
                        RetResult<Object> result = new RetResult<>();
                        result.setCode(RetCode.UNAUTHORIZED).setMsg("签名认证失败");
                        responseResult(response, result);
                        return false;
                    }
                }
            }
            //这里添加的是拦截的路径  /**为全部拦截
        ).addPathPatterns("/userInfo/selectAlla");
}private void responseResult(HttpServletResponse response, RetResult<Object> result) {
    response.setCharacterEncoding("UTF-8");
    response.setHeader("Content-type", "application/json;charset=UTF-8");
    response.setStatus(200);
    try {
        response.getWriter().write(JSON.toJSONString(result, SerializerFeature.WriteMapNullValue));
    } catch (IOException ex) {
        LOGGER.error(ex.getMessage());
    }
}

Два: тест

Введите localhost:8080/userInfo/selectAll


Введите localhost:8080/userInfo/selectAlla


Добавить подпись в шапку


Третий: Создайте свой собственный перехватчик

Создать ядро→перехватчик→Перехватчик1

package com.example.demo.core.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Interceptor1 implements HandlerInterceptor {

    /**
     * 在请求处理之前进行调用(Controller方法调用之前)
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println(">>>MyInterceptor1>>>>>>>  preHandle");
        // 只有返回true才会继续向下执行,返回false取消当前请求
        return true;
    }

    /**
     * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
        System.out.println(">>>MyInterceptor1>>>>>>>  postHandle");
    }

    /**
     * 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println(">>>MyInterceptor1>>>>>>>  afterCompletion");
    }
}

Четвертое: изменить конфигурацию WebConfigurer

Измените метод addInterceptors следующим образом.

@Override
public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(
            //注意,HandlerInterceptorAdapter  这里可以修改为自己创建的拦截器
            new Interceptor1() {
                @Override
                public boolean preHandle(HttpServletRequest request,
                                         HttpServletResponse response, Object handler) throws Exception {
                    String ization = request.getHeader("ization");
                    if(IZATION.equals(ization)){
                        return true;
                    }else{
                        RetResult<Object> result = new RetResult<>();
                        result.setCode(RetCode.UNAUTHORIZED).setMsg("签名认证失败");
                        responseResult(response, result);
                        return false;
                    }
                }
            }
            //这里添加的是拦截的路径  /**为全部拦截
        ).addPathPatterns("/userInfo/selectAlla");
}

Пять: тест

Введите localhost:8080/userInfo/selectAlla


Добавить подпись в шапку


успех

адрес проекта

Адрес облака кода:git ee.com/bean также/no SPR…

Адрес гитхаба:GitHub.com/my bean also/no s…

Писать статьи непросто, если это вам поможет, нажмите звездочку

конец

Добавление функции перехватчика завершено, и последующие функции будут обновляться одна за другой.Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь со мной по адресу mr_beany@163.com. Также попросите руководства у всех великих богов, спасибо всем.