RESTful登录设计(基于Spring及Redis的Token鉴权)什么是 保持登录态

RESTful登录设计(基于Spring及Redis的Token鉴权)

什么是 REST

REST (Representational State Transfer) 是一种软件架构风格。它将服务端的信息和功能等所有事物统称为资源,客户端的请求实际就是对资源进行操作,它的主要特点有: - 每一个资源都会对应一个独一无二的 url - 客户端通过 HTTP 的 GET、POST、PUT、DELETE 请求方法对资源进行查询、创建、修改、删除操作 - 客户端与服务端的交互必须是无状态的

使用 Token 进行身份鉴权

网站应用一般使用 Session 进行登录用户信息的存储及验证,而在移动端使用 Token 则更加普遍。它们之间并没有太大区别,Token 比较像是一个更加精简的自定义的 Session。Session 的主要功能是保持会话信息,而 Token 则只用于登录用户的身份鉴权。所以在移动端使用 Token 会比使用 Session 更加简易并且有更高的安全性,同时也更加符合 RESTful 中无状态的定义。

交互流程

  1. 客户端通过登录请求提交用户名和密码,服务端验证通过后生成一个 Token 与该用户进行关联,并将Token 返回给客户端。
  2. 客户端在接下来的请求中都会携带 Token,服务端通过解析 Token 检查登录状态。
  3. 当用户退出登录、其他终端登录同一账号(被顶号)、长时间未进行操作时 Token 会失效,这时用户需要重新登录。

程序示例

服务端生成的 Token 一般为随机的非重复字符串,根据应用对安全性的不同要求,会将其添加时间戳(通过时间判断 Token 是否被盗用)或 url 签名(通过请求地址判断 Token 是否被盗用)后加密进行传输。在本文中为了演示方便,仅是将 User Id 与 Token 以”_”进行拼接。

/**
 * Token 的 Model 类,可以增加字段提高安全性,例如时间戳、url 签名
 * @author ScienJus
 * @date 2019/12/7.
 */
public class TokenModel {
   

    // 用户 id
    private long userId;

    // 随机生成的 uuid
    private String token;

    public TokenModel (long userId, String token) {
   
        this.userId = userId;
        this.token = token;
    }

    public long getUserId () {
   
        return userId;
    }

    public void setUserId (long userId) {
   
        this.userId = userId;
    }

    public String getToken () {
   
        return token;
    }

    public void setToken (String token) {
   
        this.token = token;
    }
}

Redis 是一个 Key-Value 结构的内存数据库,用它维护 User Id 和 Token 的映射表会比传统数据库速度更快,这里使用 Spring-Data-Redis 封装的 TokenManager 对 Token 进行基础操作:

/**
 * 对 token 进行操作的接口
 * @author ScienJus
 * @date 2015/7/31.
 */
public interface TokenManager {
   

    /**
     * 创建一个 token 关联上指定用户
     * @param userId 指定用户的 id
     * @return 生成的 token
     */
    public TokenModel createToken (long userId);

    /**
     * 检查 token 是否有效
     * @param model token
     * @return 是否有效
     */
    public boolean checkToken (TokenModel model);

    /**
     * 从字符串中解析 token
     * @param authentication 加密后的字符串
     * @return
     */
    public TokenModel getToken (String authentication);

    /**
     * 清除 token
     * @param userId 登录用户的 id
     */
    public void deleteToken (long userId);

}

/**
 * 通过 Redis 存储和验证 token 的实现类
 * @author ScienJus
 * @date 2015/7/31.
 */
@Component
public class RedisTokenManager implements TokenManager {
   

    private RedisTemplate redis;

    @Autowired
    public void setRedis (RedisTemplate redis) {
   
        this
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、系统概述 助农电商系统是一种基于互联网技术的新型电商平台,其目的是为农民提供一个高效、便捷的销售渠道,同时为消费者提供优质的农产品。本系统采用SpringBoot作为基础框架,结合MyBatis等开源技术实现。 二、系统设计 1. 总体架构 本系统采用前后端分离架构,前端使用Vue.js框架,后端采用SpringBoot框架。前端与后端通过RESTful API进行通信,数据存储采用MySQL数据库。 2. 功能模块 (1)用户模块:包括用户注册、登录、个人信息管理等功能。 (2)商品模块:包括商品的发布、浏览、购买等功能。 (3)订单模块:包括订单的生成、支付、发货、确认等功能。 (4)支付模块:包括在线支付、退款等功能。 (5)物流模块:包括物流信息的查询、订单的跟踪等功能。 (6)评价模块:包括商品评价、用户评价等功能。 (7)管理员模块:包括商品管理、订单管理、用户管理等功能。 3. 数据库设计 本系统采用MySQL数据库,数据库表的设计如下: (1)用户表:包括用户ID、用户名、密码、手机号、邮箱等字段。 (2)商品表:包括商品ID、商品名称、商品价格、商品图片、商品描述等字段。 (3)订单表:包括订单ID、用户ID、商品ID、订单金额、订单状等字段。 (4)支付表:包括支付ID、订单ID、支付金额、支付状等字段。 (5)物流表:包括物流ID、订单ID、物流状、物流信息等字段。 (6)评价表:包括评价ID、用户ID、商品ID、评价内容、评价时间等字段。 (7)管理员表:包括管理员ID、管理员用户名、管理员密码等字段。 4. 技术实现 (1)前端实现:采用Vue.js框架实现前端页面的开发,使用Axios库处理前后端通信。 (2)后端实现:采用SpringBoot框架实现后端业务逻辑的开发,使用MyBatis框架实现数据持久化。 (3)安全实现:采用Spring Security框架实现用户认证和授权,使用JWT实现前后端token传递。 (4)支付实现:采用支付宝支付接口实现在线支付功能。 (5)物流实现:采用快递100接口实现物流信息查询功能。 三、系统优化 1. 缓存机制 采用Redis缓存技术,将热点数据缓存到Redis中,减轻数据库的压力,提高系统响应速度和并发能力。 2. 分布式架构 采用Dubbo和Spring Cloud等分布式框架,将系统拆分成多个微服务,提高系统的可扩展性和可维护性。 3. 高可用性 采用Nginx负载均衡技术,实现多节点部署,提高系统的可用性和容错能力。 四、总结 本文介绍了基于SpringBoot的助农电商系统的设计方案及思路,包括系统架构、功能模块、数据库设计、技术实现和系统优化等方面。该系统不仅给农民提供了一个销售渠道,也为消费者提供了优质的农产品。该系统的设计方案可为其他电商系统的设计提供参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值