认证鉴权方案

现在一般使用比较多的认证方式有四种:

  • Session
  • Token
  • SSO单点登录
  • OAtuth登录

1.Cookie + Session

最常见的就是 Cookie + Session 认证。

Session,是一种有状态的会话管理机制,其目的就是为了解决HTTP无状态请求带来的问题。
当用户登录认证请求通过时,服务端会将用户的信息存储起来,并生成一个 SessionId 发送给前端,前端将这个 SessionId 保存起来。之后前端再发送请求时都携带 SessionId,服务器端再根据这个 SessionId 来检查该用户有没有登录过。这个 SessionId, 一般是保存在Cookie中。
认证鉴权方案_第1张图片
如果用户第一次访问某个服务器时,服务器响应数据时会在响应头的 Set-Cookie 标识里将Session Id 返回给浏览器,浏览器就将标识中的数据存在Cookie中。
@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/login")
    public String login(@RequestBody User user, HttpSession session) {
        if ("admin".equals(user.getUsername()) && "admin".equals(user.getPassword())) {
            // 登录成功 写入Session
            session.setAttribute("sessionId", user);
            return "login success";
        }
        return "username or password incorrect";
    }

    @GetMapping("/logout")
    public String logout(HttpSession session) {
        // 注销 删除Session
        session.removeAttribute("sessionId");
        return "logout success";
    }
    @GetMapping("/api")
    public String api(HttpSession session) {
        // 用户操作 判断是否登录
        User user = (User) session.getAttribute("sessionId");
        if (user == null) {
            return "please login";
        }
        return "return data";
    }
}
切记:用户名存在session里面时只能使用session.setAttribute("sessionId", user);
  • 在第一次访问服务器时,服务器会生成一个唯一的session id,并将该id发送给客户端。客户端在后续的请求中会将该session id作为cookie或者请求参数的形式发送回服务器
  • 服务器接收到session id后,会根据该id在服务器端的session存储区中查找对应的session对象。该session对象用于存储用户

你可能感兴趣的:(认证授权,java)