1.注册
要对用户注册时设置的用户名、密码等做一些规定,比如用户名的合法性:允许使用的字符、允许的长度、不允许重复、不允许出现敏感词;密码的安全性:长度要求、字符要求等。在保存密码时,使用加密后的密文保存,以防万一。为了防止批量注册,可以增加邮箱/手机验证。
2.登录
如果用户登录时输入的用户名或密码不正确,可以适当地给用户反馈一些提示信息;在密码校验成功后,发放 token 令牌给用户,并进行登记,token 可以有多种实现方式,而 cookie 是在浏览器客户端被广泛使用的一种。从浏览器请求中获取 cookie 会用到 HttpServletRequest 中的 getCookies() 方法,而添加 cookie 用到的是 HttpServletResponse 中的 addCookies() 方法。
服务端将令牌存储在数据库中,与用户 id 相关联。在数据库创建 login_ticket表,model 包创建 LoginTicket类,完成对应的 LoginTicketDAO,之后完成登录的业务逻辑。
3.登录状态验证 - 拦截器
当用户密码验证通过后,服务端给用户发放一个 token 令牌,保存在浏览器的 cookie 中,通常这个令牌只有一段时间的有效期。当客户端通过浏览器访问时,服务端就可以通过验证令牌来确认客户端的身份,只有在令牌存在且处于有效状态才可以通过验证,用拦截器 interceptor 可以实现 token 的校验。
新建 interceptor 包,创建 PassportInterceptor 类,继承 HandlerInterceptor,重写 preHandle(), postHandle(), afterCompletion() 方法。
新建 config 包,创建 WebConfig 类,继承 WebMvcConfigurer,重写 addInterceptors() 方法注册拦截器。
要同时处理多个用户的请求,就要用到多线程,在 model 包建一个 User 多线程的类,成员变量为 ThreadLocal<User>类型。