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 {
@Autowired
private UserService us服务器托管网erService;
@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 {
@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/**
,否则会报错。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
在数据结构中,图(Graph)是由节点(Vertex)和连接节点的边(Edge)组成的一种非线性数据结构。图可以用来表示各种实际问题中的关系和连接,如社交网络、道路网络、电路等。 图由两个主要部分组成:节点和边。节点表示实体或对象,而边表示节点之间的连接关系。…