长春网站排名优化公司,宁夏一站式网站建设,阿里云网站建设9元,网站修改需要什么1. 基于Session的登录验证
基于Session的登录验证方式是最简单的一种登录校验方式。
为啥能用Session作为登录验证的一种方式#xff0c;因为每个用户的请求都会有一个Session#xff0c;这个对象是Servlet给我们创建的#xff0c;不需要我们手动创建#xff0c;并且这个…1. 基于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 {Autowiredprivate 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) {MapString, 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 {Overridepublic 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 {Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns(/**).excludePathPatterns(/user/login, /error/**);}
}这里需要注意一定要记得放行/error/**否则会报错。