SpringBoot登录用户权限 *

作者:strive_day 时间:2022-07-15 04:18:04 

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");
 }
}

来源:https://blog.csdn.net/qq_40542534/article/details/115025189

标签:SpringBoot,登录,权限 ,
0
投稿

猜你喜欢

  • 详细解读java同步之synchronized解析

    2022-08-01 15:27:05
  • 线程池中使用spring aop事务增强

    2021-08-06 06:37:19
  • 使用异步方式调用同步方法(实例详解)

    2023-03-29 16:38:21
  • Spring Cloud微服务架构Sentinel数据双向同步

    2021-07-16 04:17:04
  • 教你安装配置Android Studio

    2023-07-09 03:26:17
  • C#中的高效IO库System.IO.Pipelines

    2022-11-16 03:43:06
  • java生成json实现隐藏掉关键属性

    2021-12-07 17:31:29
  • java 实现将一个string保存到txt文档中

    2022-07-30 05:32:38
  • Java扩展库RxJava的基本结构与适用场景小结

    2022-12-27 10:03:15
  • Android嵌套滚动NestedScroll的实现了解一下

    2022-09-10 13:48:57
  • 属于自己的Android对话框(Dialog)自定义集合

    2022-08-03 23:09:21
  • springcloud 如何解决微服务之间token传递问题

    2022-08-27 18:43:48
  • 详解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)

    2023-06-22 06:17:48
  • 详解JAVA 强引用

    2021-11-06 18:38:16
  • Android中调用另一个Activity并返回结果(选择头像功能为例)

    2022-09-08 23:43:10
  • C#定义简单的反射工厂实例分析

    2021-08-21 15:16:16
  • Struts2+Hibernate实现数据分页的方法

    2022-10-28 05:31:13
  • Java多种方式实现生产者消费者模式

    2023-12-13 05:56:16
  • 使用java生成json时产生栈溢出错误问题及解决方案

    2023-01-09 17:41:10
  • C#对二进制数据进行base64编码的方法

    2023-09-02 23:26:12
  • asp之家 软件编程 m.aspxhome.com