1.认证与授权实现思路
如果系统的模块众多,每个模块都需要就行授权与认证,所以我们选择基于token的形式进行授权与认证,用户根据用户名密码认证成功,然后获取当前用户角色的一系列权限值,并以用户名为key,权限列表为value的形式存入redis缓存中,根据用户名相关信息生成token返回,浏览器将token记录到cookie中,每次调用api接口都默认将token携带到header请求头中,Spring-security解析header头获取token信息,解析token获取当前用户名,根据用户名就可以从redis中获取权限列表,这样Spring-security就能够判断当前请求是否有权限访问
2.购物车实现思路
1)用户没有登录, 添加商品, 此时的商品是被添加到了浏览器的Cookie中, 所以当再次访问时(不登录),商品仍然在Cookie中, 所以购物车中的商品还是存在的.
2)用户登录了,添加商品, 此时会将Cookie中和用户选择的商品都添加到购物车中, 然后删除Cookie中的商品. 所以当用户再次访问(不登录),此时Cookie中的购物车商品已经被删除了, 所以此时购物车中的商品不在了.
3)用户登录, 添加商品,此时商品被添加到数据库做了持久化存储, 再次打开登录用户名和密码,该用户选择的商品肯定还是存在的, 所以购物车中的商品还是存在的.
3.一个小时内最多只能发送十条短信实现思路
方案1:每次发送一条短信存入数据库记录,主要字段有发送时间和手机号,然后,发送短信前通过数据库查询当前时间一个小时内是否已经发送十条短信,如果大于10,则不能发送。
方案2: 每次发送短信时将时间戳存入redis的list中,key为手机号,然后每次发送短信前获取redis中是所有时间戳,并对时间戳进行排序,根据次数限制,比如十次来截取list,计算第一个元素和最后一个元素的差值,若差值小于1小时,则不能发送。