1.产生原因
app 应用需要访问服务器,此过程中涉及到身份认证和权限控制的问题,如何搭建 app 和服务器之间信任的桥梁?


我们都知道,session、cookie 是作为浏览器里面的用户和服务器之间认证的一个方式,而app 和服务器之间的交流也是使用的 http 请求,很明显它们遇到的问题是差不多的,但是因为 app 和浏览器又不完全一样(浏览器可以存放 cookie),所以我们可以借鉴浏览器和服务器的思想来解决 app 和服务器端的


cookie、session 的实现方式:
cookie 的实现方式是浏览器本身支持服务器端向浏览器写入键值对数据,当然客户端可以禁止服务器向客户端写入 cookie。
session 的实现方式是根据客户端的请求来找出当前客户端在服务器端的存放信息,有两种实现方式:
1.使用 cookie 写入 jsessionid=xxx
2.使用 url 重写(相当于在 url 后面加入 jsessionid=xxx)


无论使用哪种实现方式,最后都可以根据当前的客户端请求来确定当前请求的 request 在当前服务器中对应的 session,所以才会有 HttpSession session = request.getSession(); 因为session的确定必须从 request 里面拿到它的 jsessionid 才能取到对应的 session。


通过对浏览器和服务器交互的实现方式我们知道了要记录当前用户的信息我们需要在浏览器和服务器之间进行交互时传递一个 jsessionid 来标记当前用户,于是我们也可以通过同样的方式来记录app和服务器之间的交互,也就是 app 用户在登录之后我们都会给它一个 token 字符串来唯一标识当前用户,这样当下次这个人来的时候我们就可以根据 token 来取出当前用户的数据信息(用户个人信息、权限...),而且我们可以通过设定 token 的实效时间来控制用户的在线时间


2.实现方式


通过上面的分析我们知道了,我们只需要为每一个访问用户记录下来一个唯一的 token 即可(不可重复),之后我们就可以根据用户的 token来实现 app 端和服务器端之间的相对安全的交互了。


使用 token 是为了信息安全,我们可以根据设置 token 的失效时间来控制用户是不是可以对服务器进行访问,而且可以控制指定用户的访问保证用户数据的安全性。