SpringBoot登录用户权限 *
作者:strive_day 发布时间:2022-07-15 04:18:04
标签: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");
}
}
来源:https://blog.csdn.net/qq_40542534/article/details/115025189
0
投稿
猜你喜欢
- 1.最近的项目中,有一个Activity用到Fragment+ViewPager,其中一个fragment中实现了视频播放的功能,包含有Su
- @Value从Nacos配置中心获取值并自动刷新在使用Nacos作为配置中心时,除了@NacosValue可以做到自动刷新外,nacos-s
- service是业务层 action层即作为控制器DAO (Data Access Object) 数据访问1.JAVA中Action层,
- 本文实例为大家分享了C#实现围棋游戏的具体代码,供大家参考,具体内容如下之所以选择围棋作为大作业一方面是想挑战一下,另一方面是由于从6岁学围
- 今天本文与大家分享如何得到数组中的最大值和最小值的实例。很适合Java初学者复习数组的基本用法与流程控制语句的使用。具体如下:这个程序主要是
- Java 8中引入了CompletableFuture类,它是一种方便的异步编程工具,可以处理各种异步操作,如网络请求、文件IO和数据库操作
- 本文实例讲述了Java接口继承和使用接口操作。分享给大家供大家参考,具体如下:一 接口的继承1 点睛接口支持多继承,一个接口可以有多个父接口
- 1. SpringBoot ResponseBody 返回值中null值处理@PostMapping(path = "/test&
- Spring Security是一款基于Spring框架的认证和授权框架,提供了一系列控制访问和保护应用程序的功能,同时也支持基于角色和权限
- 在用unity进行游戏开发时我们有时需要一些物体在场景切换时不需要被销毁这时我们可以用官方给的DontDestroyOnLoad()方法,这
- java.lang.OutOfMemoryError处理错误java.lang.OutOfMemoryError异常解决方法原因: 常见的有
- 本文实例讲述了微信js sdk invalid signature签名错误问题的解决方法。分享给大家供大家参考,具体如下:/**最近在做微信
- 路径分隔符:Windows下是“\”unix|linux下是“/”考虑到程序的可移植性,创建文件时建议大家选用"/",因
- 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。包的作用1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用
- 1、什么是GradleGradle是一种结合了Ant和Maven两者优势的下一代构建工具,既有Ant构建灵活性的优点,也保留Maven约定优
- 本文实例讲述了Java常用内置注解。分享给大家供大家参考,具体如下:一 通过@SuppressWarnings关闭警告信息1 代码publi
- springboot微服务内置了tomcat,在工程目录下执行:mvn clean package,可以将项目打成jar,通过java -j
- 就是每隔一定的时间显示一张图片,全部图片文件位于:“工作空间\项目名称\bin\动态图\花好月圆\”文件夹下。文件名类似:1001.jpg,
- 在文章中,我们将对输入到机器学习模型中的数据集进行预处理。这里我们将对一个硬币数据集进行预处理,以便以后在监督学习模型中进行训练。在机器学习
- 创建一个列表消息卡片到目前为止,我们只有一个消息的卡片,看上去有点单调,所以让我们来改善它,让它拥有多条信息。我们需要创建一个能够显示多条消