首页 > 其他分享 >过滤器(springboot)

过滤器(springboot)

时间:2023-02-01 22:12:17浏览次数:41  
标签:return springboot 登录 requestURI request 过滤器 import String

实现步骤:
1、创建自定义过滤器LoginCheckFilter
2、在启动类上加入注解@ServletComponentScan
3、完善过滤器的处理逻辑
②:定义Spring管理的类(接口)

 

@Slf4j
@SpringBootApplication
@ServletComponentScan
public class ReggieApplication {
    public static void main(String[] args) {
        SpringApplication.run(ReggieApplication.class,args);
        log.info("项目启动成功...");
    }
}

  

package com.po.reggie.filter;

import com.alibaba.fastjson.JSON;
import com.po.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;
    }
}

  

标签:return,springboot,登录,requestURI,request,过滤器,import,String
From: https://www.cnblogs.com/popopopopo/p/17084285.html

相关文章

  • springboot~WebMvcConfigurer详解
    1.前言WebMvcConfigurer配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制,可以自定义一些Handler,Interceptor......
  • springboot+webSocket
    1、新建WebSocketConfig配置类packagecom.config;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configurat......
  • Net6/SuperSocket通过命令和命令过滤器实现服务端/客户端双工通信
    十年河东,十年河西,莫欺少年穷学无止境,精益求精和上一节一致,通信数据结构如下:///+-------+---+-------------------------------+///|request|l|......
  • 过滤器应用
    需求:访问服务器资源时,需要先进行登录验证,如果没有登录,则自动跳转到登录页面核心代码:packagecom.itheima.web.filter;importjavax.servlet.*;importjavax.servlet......
  • SpringBoot整合druid数据源
    SpringBoot默认使用HikariDataSource,但也可以整合外部DataSource。下面介绍SpringBoot_Druid整合整合有两种方式:1、starter整合 2、自定义整合1、starter整合2、自定......
  • SpringBoot 前端大文件上传
    ​ 最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的......
  • springboot Config类@Import导入Config类中bean覆盖方法
    spring-cloud-openfeign-core第三方包里面有FeignClientsConfiguration.class里面是包括了feign需要的bean,但里面已经定义了feignEncoder、feignDecoder,如果项目中想要定制......
  • 初次使用 WebSocket -springboot 集成
    参考自:SpringBoot集成websocket_清泉影月的博客-CSDN博客,WebSocket中利用service层交互数据库_戒烟的李白的博客-CSDN博客_websocketservice核心依赖<dependency>......
  • SpringBoot2.0版本与老版本区别
    SpringBoot2.0版本新特性 以Java8为基准SpringBoot2.0要求Java版本必须8以上,Java6和7不再支持。内嵌容器包结构调整为了支持reactive使用场景,内嵌的容器包结构......
  • SpringBoot实现热部署
    在项目开发的过程中,会频繁修改类的代码,导致需要重新编译、启动,影响开发效率。SpringBoot提供了spring-boot-devtools组件,使代码改动后,无须手动重启SpringBoot应用即可重......