课程四
注册、登录、浏览Interceptor、未跳转登录、数据安全性
注册:
输入参数(String username, String password, boolean rememberme)
首先对参数进行判断,用户名如果为空,返回对应的信息,密码如果为空,返回对应的信息,再去数据库中查找用户名如果被注册,返回对应的信息,如果没有被都符合,新建User,设置salt,将password + slat 进行MD5加密,
最后再添加ticket,ticket与userId绑定,ticket是一段字符串,设置有效期限,设置状态(0正常,1失效)。返回包含ticket的map,在controller中会对Cookie进行设置,添加新的ticket,设置Cookie有效期
浏览Interceptor(passportInterceptor):preHandle里对用户进行辨识,如果当前请求没有包含ticket,或者ticket过期,preHandle里不会进行处理,如果懈怠了有效的ticket(ticket没有过期,状态为0),会将当前ticket对应的user信息添加到 hostHolder中,hostHolder是包装了ThreadLocal类的一个类,包含的是user用户信息。 postHandle方法中如果hostHolder中包含了用户信息,会加入到ModelAndView中,让前端进行渲染。 afterCompletion方法中,会将hostHolder中的用户信息移除。
未跳转登录(loginRequiredInterceptor): 当用户浏览需要登录的界面时,会跳出拦截器进行判断,在preHandle中判断当前hostHolder中是否有用户信息,如果没有,使用httpServletResponse.sendRedirect方法直接跳转到登录页面,next参数为当前页面的URI。
如果有用户信息,则不进行任何操作。
拦截器需要注册 继承WebMvcConfigurerAdapter重写addInterceptors(InterceptorRegistry registery)方法,register.add(passportInterceptor),register.add(loginRequiredInterceptor).addPathPatterns(“/user/*”);