首页 > 其他分享 >SpringBoot项目中使用拦截器进行请求的拦截

SpringBoot项目中使用拦截器进行请求的拦截

时间:2023-05-31 10:25:23浏览次数:36  
标签:拦截器 SpringBoot 登录 request 拦截 noFilterUris 请求

在没有拦截器拦截前端请求的情况下,即使用户不进行登录,却依然能够进入系统。这显然是不合理的。这里使用拦截器对其请求进行一个拦截并且过滤。将那些需要需要用户登录才能够展示的界面进行一个拦截,如果用户没有登录,就需要跳转到登录界面进行登录。

没有拦截器的效果展示

此时我们没有登录,但是在访问http://localhost:8080/backend/index.html时依然可以成功访问。

添加拦截器的思路分析

在未登录的情况下需要返回什么信息,需要结合前端的处理。如下图所示,如果未登录,需要给前端传一个"NOTLOGIN"。

代码实现
自定义过滤器:自定义一个过滤器 LoginCheckFilter 并实现 Filter 接口, 在doFilter方法中完成校验的逻辑。

点击查看代码
@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;

        //获取本次请求的路径
        String requestURI = request.getRequestURI();
        //定义不需要拦截的路径
        List<String> noFilterUris = new ArrayList<>();
        noFilterUris.add("/employee/login");
        noFilterUris.add("/employee/logout");
        noFilterUris.add("/backend/**");
        noFilterUris.add("/front/**");
        //判断本次请求是否需要被拦截
        for (int i = 0; i < noFilterUris.size(); i++) {
            String noFilterUri = noFilterUris.get(i);
            if (PATH_MATCHER.match(noFilterUri,requestURI)){
                log.info("本次请求不需要处理--->"+requestURI);
                filterChain.doFilter(request,response);
                return;
            }
        }
        //判断用户是否登录
        if (request.getSession().getAttribute("employee")!=null){
            log.info("用户已登录");
            filterChain.doFilter(request,response);
            return;
        }
        //用户未登录,通过输出流的方式向客户端页面响应数据
        response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
        return;
    }
}
代码部分完成后还要在启动类上添加@ServletComponentScan注解。作用是:在SpringBoot项目中, 在引导类/配置类上加了该注解后, 会自动扫描项目中(当前包及其子包下)的@WebServlet , @WebFilter , @WebListener 注解, 自动注册Servlet的相关组件 ;

AntPathMatcher 拓展:
介绍: Spring中提供的路径匹配器 ;

标签:拦截器,SpringBoot,登录,request,拦截,noFilterUris,请求
From: https://www.cnblogs.com/wzh-Official/p/17445298.html

相关文章

  • SpringBoot集成kafka全面实战
    一、前戏1、在项目中连接kafka,因为是外网,首先要开放kafka配置文件中的如下配置(其中IP为公网IP),advertised.listeners=PLAINTEXT://112.126.74.249:90922、在开始前我们先创建两个topic:topic1、topic2,其分区和副本数都设置为2,用来测试,[root@iZ2zegzlkedbo3e64vkbefZ~]#cd/......
  • 基于JAVA的springboot+vue学生综合测评系统,附源码+数据库+论文+PPT
    1、项目介绍本学生综合测评系统以springboot作为框架,b/s模式以及MySql作为后台运行的数据库,同时使用Tomcat用为系统的服务器。本系统主要包括首页,个人中心,学生管理,试题信息管理,测评试题管理,管理员管理,综合测评管理,系统管理,综合考试管理等功能,通过这些功能的实现基本能够满足日常......
  • springboot启动源码
    每个SpringBoot项目都有一个主程序启动类,在主程序启动类中有一个启动项目的main()方法,在该方法中通过执行SpringApplication.run()即可启动整个SpringBoot程序。问题:那么SpringApplication.run()方法到底是如何做到启动SpringBoot项目的呢?下面我们查看run()方法内部的源码,核......
  • 分页 springboot
    maven<!--https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spri......
  • java spring添加自义定拦截器后发生访问路径错误,状态码应该返回404时却返回200的bug
    javaspring添加自义定拦截器后发生访问路径错误,状态码应该返回404时却返回200的bug问题自义定拦截器LoginInterceptor继承HandlerInterceptor,自义定配置类继承WebMvcConfigurer。配置类中@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){......
  • hj_podman_jenkins_maven_git_springboot_ssh一键部署项目
    podmanpulljenkins/jenkins:jdk17podmanrun-d--privileged=true\-uroot--namejenkins_jdk17_8081\-p8081:8080-p50001:50000\-v/hj_files/jenkins_jdk17:/var/jenkins_home\a307650508c6http://105.35.260.230:8081/ 安装好推荐配置后.再安装俩插件  Mave......
  • springboot-解决项目编译后resources下文件生成乱码问题
    SpringBoot项目下resources文件项目编译之后resources下文件会生成乱码,是说明maven打包的时候出现问题缺少一个插件<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId>......
  • springboot使用jdbc连接mysql(不用配置文件)
     1、连接mysql的工具类:packagecom.jzproject.common.mysql;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importorg.springframework.jdbc.core.JdbcTemplate;importjava.sql.*;importjava.util.ArrayList;importjava.util.HashMap;......
  • SpringBoot集成RocketMQ,rocketmq_client.log日志文件配置
    SpringBoot项目集成rocketmq-client<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.7.0</version></dependency>项目启动时会在${user.home}/logs目录下创建一个roc......
  • 非常不错的springboot启动shell脚本
    #!/bin/bashJAVA_OPTIONS_INITIAL=-Xms256MJAVA_OPTIONS_MAX=-Xmx256M_JAR_KEYWORDS=/wls/appsystem/ruoyi/apps/ruoyi-admin.jarAPP_NAME=ruoyi-adminAPPLICATION_FILE=/wls/appsystem/ruoyi/config/application.propertiesAPPLICATION_YAML_FILE=/wls/appsystem/ruoyi......