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登录验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot集成Swagger2生成接口文档的方法示例
我们提供Restful接口的时候,API文档是尤为的重要,它承载着对接口的定义,描述等,本文主要介绍了SpringBoot集成Swagger2生成接口文档的方法示例,需要的朋友们下面随着小编来一起学习学习吧2018-12-12Java中Stream的flatMap与map使用场景及区别详解
这篇文章主要介绍了Java中Stream的flatMap与map使用场景及区别详解,Stream 流式操作,一般用于操作集合即 List 一类的数据结构,简单来说 Stream 的 map 使得其中的元素转为另一种元素的映射(map)方法,需要的朋友可以参考下2024-01-01mybatis Interceptor对UpdateTime自动处理的实现方法
这篇文章主要给大家介绍了关于使用mybatis Interceptor对UpdateTime自动处理的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧2018-12-12java用LocalDateTime类获取当天时间、前一天时间及本周/本月的开始和结束时间
这篇文章主要给大家介绍了关于java使用LocalDateTime类获取当天时间、前一天时间及本周/本月的开始和结束时间的相关资料,文中通过代码示例介绍的非常详细,需要的朋友可以参考下2023-08-08
最新评论