SpringBoot添加过滤器
在Springboot中添加过滤器来进行请求拦截配置
·
问题描述
在Springboot中添加过滤器来进行请求拦截配置
解决方案:
1、在启动类上加上@ServletComponentScan//扫描过滤器使用
2、创建filter包专业放过滤器
3、在该包中创建过滤器
@Slf4j @WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*") public class LoginCheckFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest;//向上转型 HttpServletResponse response = (HttpServletResponse) servletResponse; log.info("拦截请求: {}",request.getRequestURI());//这个是日志信息,直接输出拦截的请求 //这里书写业务逻辑!!! filterChain.doFilter(request,response);//放行 } }
4、然后在该类中书写写逻辑业务,这里以登录拦截为例,配合前端vue的响应拦截器书写的!
/** * 检查用户是否完成登录 * @author mrs * @create 2022-05-31 10:57 */ @Slf4j @WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")//先全部拦截 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(); String[] urls = new String[]{//列举放行资源 "/employee/login",//放行登录请求 "/employee/login",//放行注册请求 "/backend/**",//放行静态资源和静态页面 "/front/**" }; //2、判断本次请求是否需要处理 boolean check = check(requestURI, urls); //3、如果不需要处理,则直接放行 if(check){ filterChain.doFilter(request,response);//放行 return; } //4、判断登录状态,如果已登录,则直接放行 if(request.getSession().getAttribute("employee") != null){ filterChain.doFilter(request,response);//放行 return; } //5、如果未登录则返回未登录结果,通过输出流的方式向客户端页面响应数据 // 这里响应的是backend/js/request.js中的响应拦截器 response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN"))); } /** * 路径匹配,检查本次请求是否放行 * @param requetURI 从前端传回的请求 * @param urls 上面不用拦截的请求 * @return 进行对比返回 */ public boolean check(String requetURI,String[] urls){ for (String url : urls) { boolean match = PATH_MATCHER.match(url, requetURI);//使用上面定义的路径匹配器,进行比对 if(match){ return true;//匹配成功就返回true } } return false;//一个也没匹配上,返回false } }
更多推荐
已为社区贡献1条内容
所有评论(0)