当前位置:网站首页>Code de mise en œuvre de l'intercepteur et du filtre
Code de mise en œuvre de l'intercepteur et du filtre
2022-06-26 08:56:00 【La voie de l'architecture】
Code d'implémentation de l'intercepteur et du filtre
Intercepteur
1.Créer un nouveauinterceptorSac
LoginInterceptor.java
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** Définir l'intercepteur du processeur */
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request.getSession().getAttribute("uid") == null) {
response.sendRedirect("/web/login.html");
return false;
}
return true;
}
}
2. Nouveau paquet de configuration config
LoginInterceptorConfigurer.java
import com.cy.store.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.List;
/** Enregistrez L'intercepteur de processeur */
@Configuration
public class LoginInterceptorConfigurer implements WebMvcConfigurer {
/** Configuration de l'intercepteur */
@Override
public void addInterceptors(InterceptorRegistry registry) {
// Créer un objet intercepteur
HandlerInterceptor interceptor = new LoginInterceptor();
// Liste blanche
List<String> patterns = new ArrayList<>();
patterns.add("/bootstrap3/**");
patterns.add("/css/**");
patterns.add("/images/**");
patterns.add("/js/**");
patterns.add("/web/register.html");
patterns.add("/web/login.html");
patterns.add("/web/index.html");
patterns.add("/web/product.html");
patterns.add("/users/reg");
patterns.add("/users/login");
patterns.add("/districts/**");
patterns.add("/products/**");
// Ajouter un intercepteur par l'outil d'enregistrement
registry.addInterceptor(interceptor).addPathPatterns("/**").excludePathPatterns(patterns);
}
}
Filtre
1.Construire unfilterSac
LoginCheckFilter.java
import com.alibaba.fastjson.JSON;
import com.itheima.reggie.common.BaseContext;
import com.itheima.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/** * Vérifier si l'utilisateur a terminé la connexion */
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")
@Slf4j
public class LoginCheckFilter implements Filter{
//Pathmatcher,Prise en charge des jokers
public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
//1、Obtenir cette demandeURI
String requestURI = request.getRequestURI();// /backend/index.html
log.info("Interception des demandes:{}",requestURI);
// Définir un chemin de requête qui n'a pas besoin d'être traité
String[] urls = new String[]{
"/employee/login",
"/employee/logout",
"/backend/**",
"/front/**",
"/common/**",
"/user/sendMsg",
"/user/login"
};
//2、 Déterminer si cette demande doit être traitée
boolean check = check(urls, requestURI);
//3、 Si ce n'est pas nécessaire ,Alors laissez passer directement
if(check){
log.info("Cette demande{}Pas besoin de traitement",requestURI);
filterChain.doFilter(request,response);
return;
}
//4-1、Déterminer l'état de connexion,Si vous êtes connecté,Alors laissez passer directement
if(request.getSession().getAttribute("employee") != null){
log.info("Utilisateur connecté,UtilisateursidPour:{}",request.getSession().getAttribute("employee"));
Long empId = (Long) request.getSession().getAttribute("employee");
BaseContext.setCurrentId(empId);
filterChain.doFilter(request,response);
return;
}
//4-2、Déterminer l'état de connexion,Si vous êtes connecté,Alors laissez passer directement
if(request.getSession().getAttribute("user") != null){
log.info("Utilisateur connecté,UtilisateursidPour:{}",request.getSession().getAttribute("user"));
Long userId = (Long) request.getSession().getAttribute("user");
BaseContext.setCurrentId(userId);
filterChain.doFilter(request,response);
return;
}
log.info("L'utilisateur n'est pas connecté");
//5、 Si vous n'êtes pas connecté, retournez les résultats non connectés , Répondre aux données de la page client par le biais du flux de sortie
response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
return;
}
/** * Correspondance des chemins, Vérifier si la mainlevée est requise pour cette demande * @param urls * @param requestURI * @return */
public boolean check(String[] urls,String requestURI){
for (String url : urls) {
boolean match = PATH_MATCHER.match(url, requestURI);
if(match){
return true;
}
}
return false;
}
}
边栏推荐
- 三菱PLC若想实现以太网无线通讯,需要具备哪些条件?
- Using MySQL and Qt5 to develop takeout management system (I): environment configuration
- Ltp-- extract time, person and place
- Degree of freedom analysis_ nanyangjx
- 深度学习论文阅读目标检测篇(七)中文版:YOLOv4《Optimal Speed and Accuracy of Object Detection》
- Koa_ mySQL_ Integration of TS
- Solution to the encoding problem encountered by the crawler when requesting get/post
- How to correctly PIP install pyscipopt
- Checkerboard generation + camera calibration + stereo matching
- Pandas vs. SQL 1_ nanyangjx
猜你喜欢

Yolov5进阶之五GPU环境搭建

Drawing with MATLAB (1)

反爬之验证码识别登录 (OCR字符识别)

uniapp用uParse实现解析后台的富文本编辑器的内容及修改uParse样式

Opencv learning notes II

Whale conference one-stop intelligent conference system helps organizers realize digital conference management

鲸会务为活动现场提供数字化升级方案

pgsql_ UDF01_ jx

Opencv learning notes 3

Fast construction of neural network
随机推荐
Install Anaconda + NVIDIA graphics card driver + pytorch under win10_ gpu
读书笔记:SQL 查询中的SQL*Plus 替换变量(DEFINE变量)和参数
Degree of freedom analysis_ nanyangjx
WBC learning notes (I): manually push WBC formula
上下架和橱窗推荐如何设置,优化过程需要注意的地方
[unity mirror] use of networkteam
Pytorch neural network
Detailed explanation of traditional image segmentation methods
Tokenizer description in Bert
20220623 Adobe Illustrator入门
Section IV HQL execution process
如何利用最少的钱,快速打开淘宝流量入口?
nn. Modulelist and nn Sequential
唯品会工作实践 : Json的deserialization应用
isinstance()函数用法
And are two numbers of S
Selenium 搭建 Cookies池 绕过验证反爬登录
[resolved]setonnavigationitemselectedlistener() deprecated
1.Intro_ Math (white board derivation and reprint of station B)
FFmpeg音视频播放器实现