SpringBoot登录用户权限拦截器「建议收藏」

SpringBoot登录用户权限拦截器「建议收藏」1.创建自定义拦截器类并实现HandlerInterceptor接口packagecom.xgf.online_mall.interceptor;importcom.xgf.online_mall.system.domain.User;importlombok.extern.slf4j.Slf4j;importorg.springframework.stereotype.Component;importorg.springframework.web.servlet.Handler

大家好,又见面了,我是你们的朋友全栈君。

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");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160971.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 软件测试相关知识_软件测试期末考试知识点

    软件测试相关知识_软件测试期末考试知识点软件测试是软件生存周期中必不可少的环节,软件的典型生存周期可以用下图来形容:软件测试的目的是尽可能早的发现软件缺陷并确保其得以修复,因此软件测试是提高软件质量的重要手段,大量的经验实践证明,软件测试越早参与到软件开发过程中,开发出来的软件质量相对越高,时间和物力也越经济。根据软件工程的基本理论,多模块程序的测试共包括以下4个层次:…

  • java中递归算法_java中递归算法是什么怎么算的?

    java中递归算法_java中递归算法是什么怎么算的?展开全部一、递归算法基本思路:Java递归算法是基于Java语言实现的递归算法。递归算法是一e5a48de588b662616964757a686964616f31333363373166种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解。递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思…

  • ansible免密登陆的小技巧

    ansible免密登陆的小技巧

  • pycharm怎么添加项目_pycharm 其他

    pycharm怎么添加项目_pycharm 其他pycharm项目添加,在使用pycharm的过程中,有时想要在项目列表中展示多个项目需求第一种情况:原有项目的同级别目录展示另一个项目,如下面的截图操作路径:文件–打开–选择要添加的项目–点附加第二种情况:在原来的项目的主目录下添加拧一个项目,如下面的截图操作路径:文件–设置–项目–项目结构–添加内容根注意:以上两种添加方式:项目的根目录都是第一个项目创建时的根目录,查勘方式,点终端就会显示路径,这个路径也项目的…

  • vue的双向绑定原理_vue2双向绑定原理

    vue的双向绑定原理_vue2双向绑定原理1、背景今天要讲的内容是Web前端框架vue.js中的一个细节,注意是细节哦,稍不留神就掉坑里了。由于这两天在公司开发前端vue页面,踩到了一个坑,这个坑不大不小的,但是对于我这种除非公司需要,否则不会主动学习前端技术的后端开发者来说,这个坑困扰了我半天时间。无论怎么修改代码,还是实现不了效果,归根结底还是没有找到问题的点所在。凡事都有好的一面,今天上午脑子就开了光,思路比昨天下午清晰多了,顺着思路,我终于发现了问题的点所在,然后百度一搜,果然是这样,嗨!于是我决定总结一番!大家都知道,vu

    2022年10月18日
  • docker_docker一键部署

    docker_docker一键部署1、安装mysql自行安装2、安装Gogs自行安装3、安装drone/dronedockerrun-d\–volume=/var/lib/drone:/data\–env=DRONE_DEBUG=true\–env=DRONE_LOGS_TRACE=true\–env=DRONE_LOGS_DEBUG=true\–env=DRONE_LOGS_PRETTY=true\–env=DRONE_AGENTS_ENABLED=true\–env=

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号