当前位置:网站首页>攔截器與過濾器的實現代碼
攔截器與過濾器的實現代碼
2022-06-26 08:56:00 【帥大大的架構之路】
攔截器與過濾器的實現代碼
攔截器
1.新建一個interceptor包
LoginInterceptor.java
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** 定義處理器攔截器 */
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.新建一個配置包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;
/** 注册處理器攔截器 */
@Configuration
public class LoginInterceptorConfigurer implements WebMvcConfigurer {
/** 攔截器配置 */
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 創建攔截器對象
HandlerInterceptor interceptor = new LoginInterceptor();
// 白名單
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/**");
// 通過注册工具添加攔截器
registry.addInterceptor(interceptor).addPathPatterns("/**").excludePathPatterns(patterns);
}
}
過濾器
1.建一個filter包
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;
/** * 檢查用戶是否已經完成登錄 */
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")
@Slf4j
public class LoginCheckFilter implements Filter{
//路徑匹配器,支持通配符
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、獲取本次請求的URI
String requestURI = request.getRequestURI();// /backend/index.html
log.info("攔截到請求:{}",requestURI);
//定義不需要處理的請求路徑
String[] urls = new String[]{
"/employee/login",
"/employee/logout",
"/backend/**",
"/front/**",
"/common/**",
"/user/sendMsg",
"/user/login"
};
//2、判斷本次請求是否需要處理
boolean check = check(urls, requestURI);
//3、如果不需要處理,則直接放行
if(check){
log.info("本次請求{}不需要處理",requestURI);
filterChain.doFilter(request,response);
return;
}
//4-1、判斷登錄狀態,如果已登錄,則直接放行
if(request.getSession().getAttribute("employee") != null){
log.info("用戶已登錄,用戶id為:{}",request.getSession().getAttribute("employee"));
Long empId = (Long) request.getSession().getAttribute("employee");
BaseContext.setCurrentId(empId);
filterChain.doFilter(request,response);
return;
}
//4-2、判斷登錄狀態,如果已登錄,則直接放行
if(request.getSession().getAttribute("user") != null){
log.info("用戶已登錄,用戶id為:{}",request.getSession().getAttribute("user"));
Long userId = (Long) request.getSession().getAttribute("user");
BaseContext.setCurrentId(userId);
filterChain.doFilter(request,response);
return;
}
log.info("用戶未登錄");
//5、如果未登錄則返回未登錄結果,通過輸出流方式向客戶端頁面響應數據
response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
return;
}
/** * 路徑匹配,檢查本次請求是否需要放行 * @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;
}
}
边栏推荐
- [unity mirror] use of networkteam
- 1.20 study univariate linear regression
- Intra class data member initialization of static const and static constexpr
- Realizing sequence annotation with transformers
- opencv學習筆記三
- 【程序的编译和预处理】
- [QNX Hypervisor 2.2用户手册]12.1 术语(一)
- 1.27 pytorch learning
- 1.21 study gradient descent and normal equation
- Text to SQL model ----irnet
猜你喜欢

Implementation of ffmpeg audio and video player

利用无线技术实现分散传感器信号远程集中控制

First character that appears only once

Koa_ mySQL_ Integration of TS

Recovering the system with Clonezilla USB disk

XSS cross site scripting attack

Fourier transform of image

Principle of playing card image segmentation

Mongodb分片环境搭建和验证(redis期末大作业)

【MATLAB GUI】 键盘回调中按键识别符查找表
随机推荐
Object extraction_ nanyangjx
Playing card image segmentation
KNN resolution
SQL learning experience (II): question brushing record
[unity mirror] use of networkteam
Parameter understanding of quad dataloader in yolov5
VS2005 compiles libcurl to normaliz Solution of Lib missing
And are two numbers of S
Transformers loading Roberta to implement sequence annotation task
Matlab drawing checkerboard (camera calibration)
Pandas vs. SQL 1_ nanyangjx
Tensor
Using MySQL and Qt5 to develop takeout management system (I): environment configuration
Pytorch build progression
1.20 study univariate linear regression
Install Anaconda + NVIDIA graphics card driver + pytorch under win10_ gpu
1.27 pytorch learning
ImportError: ERROR: recursion is detected during loading of “cv2“ binary extensions. Check OpenCV in
Leetcode notes: binary search simple advanced
nn. Modulelist and nn Sequential