springboot——登录认证(包括jwt技术、拦截器过滤器)
实现登录的原理
用户名和密码都输入正确,登录成功,否则,登录失败
登录功能的本质:查询,根据用户名和密码查询员工信息
实现登录的步骤
登录需要确定用户的id、username、name、token(用于 身份校验),对此要重新定义一个类LoginInfo
public class LoginInfo {
private Integer id;
private String username;
private String name;
private String token;
...
}
此外为了单独实现这个登录需求,就要再新建一个LoginControllor
// 声明一个方法,使用@PostMapping注解指定这个方法处理HTTP POST请求,路径为"/login"
@PostMapping("/login")
public Result login(@RequestBody Emp emp) {
// 使用Logger记录登录请求的详细信息
log.info("登录: {}", emp);
// 调用empService的login方法,传入Emp对象,获取登录信息
LoginInfo info = empService.login(emp);
// 判断info是否不为null,即登录是否成功
if (info != null) {
// 如果登录成功,返回成功的结果,包含登录信息
return Result.success(info);
} else {
// 如果登录失败,返回错误信息
return Result.error("用户名或密码错误");
}
}
- 这个注解@RequestBody通常与
@PostMapping
或@PutMapping
等注解一起使用,这些注解指定了处理特定类型的 HTTP 请求的方法。 @RequestBody
注解时,Spring MVC 会自动将传入的 HTTP 请求体中的 JSON(或其他格式,如 XML)数据转换成指定的 Java 对象。
登录校验
会话技术
Cookie
- Cookie通常存储在用户的计算机上,每个Cookie包含一个名称、一个值和过期时间。
- Cookie是存储在客户端的,服务器通过设置、读取和修改Cookie来与客户端进行交互,但并不直接存储Cookie数据。
- 浏览器存储的Cookie可以在一定程度上帮助用户在下一次访问网站时无需再次输入密码。这是通过一个称为“持久登录”或“记住我”的功能实现的
- 当用户下次访问网站时,浏览器会自动将存储的Cookie发送给服务器。服务器可以通过这个Cookie识别用户的会话,并恢复用户的状态,从而实现自动登录。
@GetMapping("/c1")
public Result cookie1(HttpServletResponse response){
response.addCookie(new Cookie("login_username","itheima")); //设置Cookie/响应Cookie
return Result.success();
}
//获取Cookie
@GetMapping("/c2")
public Result cookie2(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if(cookie.getName().equals("login_username")){
System.out.println("login_username: "+cookie.getValue()); //输出name为login_username的cookie
}
}
return Result.success();
}
第一次登录(localhost:8080/c1)就可以看到后端的cookie存储到了本地浏览器
第二次再次登录(localhost:8080/c2)请求头里就携带了上次登录获取的cookie
Session
- Session是一种服务器端存储,用于跟踪用户的状态。它存储了用户在访问网站期间的特定信息,如登录状态、用户偏好等。
- Session技术通常会在用户的浏览器上存储一个Cookie,这个Cookie用于在用户的浏览器和服务器之间保持会话状态。这个Cookie通常包含一个Session ID,这是一个唯一的标识符,用于在服务器上查找与该用户相关的Session数据。
//存值
@GetMapping("/s1")
public Result session1(Http