1. 背景
最近在开发对接智谱AI超拟人大模型,放了方便在pom.xml
中引入了热部署相关的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
登录校验基于Session
,把登录的用户信息保存到Session
对象中。
@PostMapping("/login")
public BaseResponse login(HttpServletRequest request, @RequestBody User user) {
if (user != null && StringUtils.isNotBlank(user.getName()) && StringUtils.isNotBlank(user.getPassword())) {
String name = user.getName();
String password = user.getPassword();
User tempUser = userService.login(name, SecureUtil.md5(password));
if (tempUser != null) {
Map<String, String> map = new HashMap<>();
map.put("id", String.valueOf(tempUser.getId()));
map.put("name", tempUser.getName());
map.put("email", tempUser.getEmail());
map.put("phone", tempUser.getPhone());
// 保存用户的登录状态
HttpSession session = request.getSession(true);
session.setAttribute("user", tempUser);
return BaseResponse.success(map);
} else {
return BaseResponse.error(ErrorCode.USERNAME_PASSWORD_ERROR);
}
}
return BaseResponse.error(ErrorCode.MISS_PARAMS);
}
然后在拦截器中判断能否从这个Session
对象中获取对用户信息,如果可以就放行,否则拦截。
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession(true);
Object user = session.getAttribute("user");
if (user != null) {
return true;
}
request.getRequestDispatcher("/error/login").forward(request, response);
return false;
}
2. 问题
首先我们第一次启动项目后,登录进入系统,然后重启项目,不用重新请求登录接口,直接就可以访问其它接口。
也就是这个Session
在项目重启之后还存在,即Session
持久化到硬盘中了,才会导致每次重启项目之后这个Session
还存在的问题。
3. 解决问题
3.1 解决方式一
修改application.yml
配置文件
server:
servlet:
session:
persistent: false
注入persistent
的值为false
,也就是不持久化。
注意:其实内部默认值就是false
,是引入的依赖中修改了这个值,所以导致内部值自动变为true
,从而导致的重启项目之后还会存在上次登录的Session
信息。
3.2 解决方式二
去掉上面的两个依赖。
注意:去掉依赖之后一定要记得点击右侧的刷新按钮,不要没点击刷新就直接点击clean
,这样是没有效果的,项目内部还是会存在这两个依赖。
Q.E.D.