SpringBoot登录用户权限拦截器

 更新时间:2021年03月21日 14:23:24   作者:strive_day  
这篇文章主要介绍了SpringBoot登录用户权限拦截器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1. 创建自定义拦截器类并实现 HandlerInterceptor 接口

package com.xgf.online_mall.interceptor;

import com.xgf.online_mall.system.domain.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;

@Slf4j
@Component
public class UserLoginAuthInterceptor implements HandlerInterceptor {
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    log.info(" ======== UserAuthInterceptor preHandle 登录权限拦截器拦截");
    User user = (User) request.getSession().getAttribute("loginUser");
    //未登录才判断,登录了直接放行
    if(user == null){
      //获取访问路径
      String address = request.getRequestURI();
      log.info("======== 拦截,访问路径 address : {}", address);
      response.sendRedirect(request.getContextPath() + "/login.html");
      return false;

      /*String address = request.getRequestURI();
      log.info("======== 拦截,访问路径 address : {}", address);
      //不是登录或者注册页面,就直接跳转登录界面
      if(!address.contains("login") && !address.contains("register")){
        //强制到登录页面
        response.sendRedirect(request.getContextPath() + "/login.html");
        //设置为false,不访问controller
        return false;
      }*/
    }
    //其它模块或者已经登录,就直接放行
//    log.info("======== 已登录 user = {}", user);
    return true;
  }


  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    log.info(" ===== UserAuthInterceptor postHandle");
  }

  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    log.info("==== UserAuthInterceptor afterCompletion");

    //记录日志 向文件里面写日志
    //获取服务器记录日志log文件所存放的目录位置 -- tomcat下的真实路径+log目录
    String logdir = request.getServletContext().getRealPath("log");
    //路径不存在就创建
    Path logdirPath = Paths.get(logdir);
    if(Files.notExists(logdirPath)){
      Files.createDirectories(logdirPath);
    }
    //目录存在就将数据[字符]写入 //存放日志的路径+文件名
    Path logfile = Paths.get(logdir,"userlog.log");
    //logfile.toFile() paths转换为File类型 true以追加的方式写入
    BufferedWriter writer = new BufferedWriter(new FileWriter(logfile.toFile(),true));

    //获取登录用户信息
    User user = (User)request.getSession().getAttribute("loginUser");
    //记录user信息,存入日志
    writer.write(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " >> " + user +"\r\n");
    writer.flush();
    writer.close();
  }
}

2. 创建WebMvcConfigurer接口实现类,注册并生效自定义的拦截器

import com.xgf.online_mall.constant.PathConstantParam;
import com.xgf.online_mall.interceptor.UserLoginAuthInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
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
@Slf4j
public class LoginConfig implements WebMvcConfigurer {
  @Autowired
  private UserLoginAuthInterceptor userLoginAuthInterceptor;

  /**
   * addInterceptors方法设置拦截路径
   *   addPathPatterns:需要拦截的访问路径
   *   excludePathPatterns:不需要拦截的路径,
   *   String数组类型可以写多个用","分割
   * @param registry
   */
  @Override
  public void addInterceptors(InterceptorRegistry registry){
    log.info(" ======== LoginConfig.addInterceptors");
    //添加对用户未登录的拦截器,并添加排除项
    //error路径,excludePathPatterns排除访问的路径在项目中不存在的时候,
    //springboot会将路径变成 /error, 导致无法进行排除。
    registry.addInterceptor(userLoginAuthInterceptor)
        .addPathPatterns("/**")
        .excludePathPatterns("/js/**", "/css/**", "/img/**", "/plugins/**")
        .excludePathPatterns("/login.html", "/register.html", "/system/user/login", "/system/user/login", "/index")
        .excludePathPatterns("/error");
  }
 }

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

相关文章

  • Java 中模仿源码自定义ArrayList

    Java 中模仿源码自定义ArrayList

    这篇文章主要介绍了Java 中模仿源码自定义ArrayList的相关资料,需要的朋友可以参考下
    2017-03-03
  • 浅析Java集合及LIst接口

    浅析Java集合及LIst接口

    这篇文章主要介绍了Java集合及LIst接口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Java中request对象常用方法汇总

    Java中request对象常用方法汇总

    这篇文章主要为大家详细汇总了Java中request对象的常用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • javac、java打jar包命令实例

    javac、java打jar包命令实例

    这篇文章主要演示Java中使用命令打jar包的实例过程,很实用,希望能给大家做一个参考。
    2016-06-06
  • Java中内存区域的划分与异常详解

    Java中内存区域的划分与异常详解

    最近在看java虚拟相关知识,把每天看到的一些内容做一个归纳总结,下面这篇文章主要给大家介绍了关于Java中内存区域的划分与异常的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-06-06
  • 这么优雅的Java ORM没见过吧!

    这么优雅的Java ORM没见过吧!

    这篇文章主要介绍了Java ORM的相关资料,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2021-01-01
  • IDEA调试技巧条件断点实现步骤详解

    IDEA调试技巧条件断点实现步骤详解

    这篇文章主要介绍了IDEA调试技巧条件断点实现步骤详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Java数据结构和算法之冒泡排序(动力节点Java学院整理)

    Java数据结构和算法之冒泡排序(动力节点Java学院整理)

    冒泡排序(Bubble Sort)是一种简单的排序算法。本文重点给大家介绍java数据结构和算法之冒泡排序,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-04-04
  • Java前端Layer.open.btn验证无效解决方法

    Java前端Layer.open.btn验证无效解决方法

    在本篇文章里我们给大家整理了一篇关于Java前端Layer.open.btn验证无效解决方法以及实例代码,需要的朋友们可以参考学习下。
    2019-09-09
  • Java中break、continue、return在for循环中的使用

    Java中break、continue、return在for循环中的使用

    这篇文章主要介绍了break、continue、return在for循环中的使用,本文是小编收藏整理的,非常具有参考借鉴价值,需要的朋友可以参考下
    2017-11-11

最新评论