SpringBoot实现登录拦截的示例代码

 更新时间:2023年09月08日 09:17:26   作者:龙猫蓝图  
如果我们不进行登录拦截的话,即使我们跳过登录页面直接去访问任意一个页面也能访问成功,那么登录功能就没有意义,同时也会存在安全问题,本文就来介绍一下SpringBoot登录拦截,具有一定的参考价值,感兴趣的可以了解一下

如果我们不进行登录拦截的话,即使我们跳过登录页面直接去访问任意一个页面也能访问成功,那么登录功能就没有意义,同时也会存在安全问题,因为有些操作是要用户登录后才能执行的,如果用户没有登录,该接口就获取不了当前访问的用户也就不知道是哪个用户执行了该操作就会出错。所以我们要进行登录判断,如果没有登录则访问任意页面都跳转到登录页面。

代码实现

  • 创建自定义过滤器LoginCheckFilter
  • 在启动类上加入注解@ServletComponentScan,才会去扫描过滤器
  • 完善过滤器的处理逻辑

具体实现

使用过滤器或者拦截器,在过滤器或者拦截器中判断用户是否已经完成登录,如果没有登录则跳转到登录页面。如果登录了或者该请求不需要登录拦截器直接放行,交由具体的controller进行处理。

LoginCheckFilter

package com.zxy.filter;
//urlPatterns配置拦截路径,这里表示拦截所有
@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();
        //定义不需要处理的请求路径,下面的*只是字符串,并不是通配符,后面通过check判断时*号就视为通配符了
        String[] urls = new String[]{
                "/employee/login",
                "/employee/logout",
                "/backend/**",
                "/front/**"
        };
        //2.判断本次请求是否需要处理
        boolean check = check(urls,requestURI);
        //3.如果不需要处理,直接放行
        if(check){
            filterChain.doFilter(request,response);
            return;
        }
        //4.如果需要处理,判断是否登录
        //登录状态,不需要处理,直接放行
        if(request.getSession().getAttribute("employee")!=null){
            filterChain.doFilter(request,response);
            return;
        }
        //5.如果未登录则返回未登录结果,通过输出流方式向客户端页面响应数据,因为我们返回的是void,所以不能return R.error("NOTLOGIN")
        response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
        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;
    }
}

到此这篇关于SpringBoot实现登录拦截的示例代码的文章就介绍到这了,更多相关SpringBoot 登录拦截内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java远程连接Linux执行命令的3种方式完整代码

    java远程连接Linux执行命令的3种方式完整代码

    在一些Java应用程序中需要执行一些Linux系统命令,例如服务器资源查看、文件操作等,这篇文章主要给大家介绍了关于java远程连接Linux执行命令的3种方式,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • java agent 使用及实现代码

    java agent 使用及实现代码

    java agent的作用可以在字节码这个层面对类和方法进行修改的技术,能够在不影响编译的情况下,修改字节码。本文主要给大家讲解java agent 使用及实现代码,感兴趣的朋友一起看看吧
    2018-07-07
  • IDEA中安装testng插件过程

    IDEA中安装testng插件过程

    这篇文章主要介绍了IDEA中安装testng插件过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java中减少if-else的几种方式

    Java中减少if-else的几种方式

    if判断语句是很多编程语言的重要组成部分,但是,若我们最终编写了大量嵌套的if语句,这将使得我们的代码更加复杂和难以维护,本文主要介绍了Java中减少if-else的几种方式,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Java shiro安全框架使用介绍

    Java shiro安全框架使用介绍

    安全管理是软件系统必不可少的的功能。根据经典的“墨菲定律”——凡是可能,总会发生。如果系统存在安全隐患,最终必然会出现问题,这篇文章主要介绍了SpringBoot安全管理Shiro框架的使用
    2022-08-08
  • Java快速批量移动文件的实现方法

    Java快速批量移动文件的实现方法

    这篇文章主要介绍了Java快速批量移动文件的实现方法,需要的朋友可以参考下
    2014-03-03
  • Java JVM类加载机制解读

    Java JVM类加载机制解读

    JVM将class文件字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆(并不一定在堆中,HotSpot在方法区中)中生成一个代表这个类的java.lang.Class 对象,作为方法区类数据的访问入口,接下来将详细讲解JVM类加载机制
    2021-11-11
  • Java基础详解之集合框架工具Collections

    Java基础详解之集合框架工具Collections

    这篇文章主要介绍了Java基础详解之集合框架工具Collections,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-04-04
  • java动态代理实现代码

    java动态代理实现代码

    这篇文章主要介绍了java 动态代理的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下,希望能给你带来帮助
    2021-07-07
  • Java使用DateTimeFormatter实现格式化时间

    Java使用DateTimeFormatter实现格式化时间

    这篇文章主要介绍了Java使用DateTimeFormatter实现格式化时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01

最新评论