Всем привет, в этой главе мы добавляем функцию перехватчика. Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь со мной по адресу 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. Также попросите руководства у всех великих богов, спасибо всем.