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,登录,权限 ,
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
详细解读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
![](https://img.aspxhome.com/file/2023/7/79947_0s.png)
教你安装配置Android Studio
2023-07-09 03:26:17
![](https://img.aspxhome.com/file/2023/4/98684_0s.jpg)
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
![](https://img.aspxhome.com/file/2023/5/101825_0s.gif)
属于自己的Android对话框(Dialog)自定义集合
2022-08-03 23:09:21
![](https://img.aspxhome.com/file/2023/3/91653_0s.png)
springcloud 如何解决微服务之间token传递问题
2022-08-27 18:43:48
详解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
2023-06-22 06:17:48
![](https://img.aspxhome.com/file/2023/4/77394_0s.png)
详解JAVA 强引用
2021-11-06 18:38:16
Android中调用另一个Activity并返回结果(选择头像功能为例)
2022-09-08 23:43:10
![](https://img.aspxhome.com/file/2023/0/130310_0s.gif)
C#定义简单的反射工厂实例分析
2021-08-21 15:16:16
Struts2+Hibernate实现数据分页的方法
2022-10-28 05:31:13
![](https://img.aspxhome.com/file/2023/8/89578_0s.jpg)
Java多种方式实现生产者消费者模式
2023-12-13 05:56:16
使用java生成json时产生栈溢出错误问题及解决方案
2023-01-09 17:41:10
![](https://img.aspxhome.com/file/2023/7/128817_0s.png)
C#对二进制数据进行base64编码的方法
2023-09-02 23:26:12