Java基于Session登录验证的实现示例
作者:Luke Ewin
基于Session的登录验证方式是最简单的一种登录校验方式,本文主要介绍了Java基于Session登录验证的实现示例,具有一定的参考价值,感兴趣的可以了解一下
基于Session的登录验证方式是最简单的一种登录校验方式。
为啥能用Session作为登录验证的一种方式,因为每个用户的请求都会有一个Session,这个对象是Servlet
给我们创建的,不需要我们手动创建,并且这个对象的作用域为整个Web
页面,也就是在整个项目中,这个Session
可以存储一些内容,相当于全局缓存,并且这个Session
有默认的过期时间,默认为30
分钟,使得保存到Session
对象中的值,可以在各个Web
页面中共享。因此,我们可以利用这个特性保存用户的登录信息。我们可以编写一个拦截器,在拦截器中通过request
对象获取Session
对象,然后根据Key
值获取到Value
值,类似于Map
集合,获取到值后和数据库进行比对,如果用户名和密码一致就放行,否则拦截。
下面是具体的代码:通过请求登录接口校验输入的用户名和密码是否正确,如果正确就把这个用户信息保存到Session
对象中。
package com.ukefu.characterglm.controller; import cn.hutool.crypto.SecureUtil; import com.ukefu.characterglm.entity.User; import com.ukefu.characterglm.service.UserService; import com.ukefu.characterglm.utils.BaseResponse; import com.ukefu.characterglm.utils.ErrorCode; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; /** * @author Luke Ewin * @date 2024/2/4 14:07 * @blog blog.lukeewin.top */ @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @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(); session.setAttribute("user", tempUser); return BaseResponse.success(map); } else { return BaseResponse.error(ErrorCode.USERNAME_PASSWORD_ERROR); } } return BaseResponse.error(ErrorCode.MISS_PARAMS); } }
拦截器:
public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); Object user = session.getAttribute("user"); if (user != null) { return true; } request.getRequestDispatcher("/error/login").forward(request, response); return false; } }
配置:把自定义的拦截器添加到容器内
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/login", "/error/**"); } }
这里需要注意:一定要记得放行/error/**
,否则会报错。
到此这篇关于Java基于Session登录验证的实现示例的文章就介绍到这了,更多相关Java Session登录验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!