导图社区 会话
会话的解释 [conversation] 指两人以上的对话(多用于学习别种语言或方言时) 详细解释 (1).聚谈;对话。现多用于学习别种语言或方言时
编辑于2022-09-26 21:01:35 四川省listener 音标['lisnә] 读音 汉语翻译 n. 收听者, 听众 英语解释: 名词listener: someone who listens attentively 同义词:hearer, auditor, attender
Filter过滤器(重要) Javaweb中的过滤器可以拦截所有访问web资源的请求或响应操作。 1、Filter快速入门 1.1、步骤: 1. 创建一个类实现Filter接口 2. 重写接口中方法 d...
会话的解释 [conversation] 指两人以上的对话(多用于学习别种语言或方言时) 详细解释 (1).聚谈;对话。现多用于学习别种语言或方言时
社区模板帮助中心,点此进入>>
listener 音标['lisnә] 读音 汉语翻译 n. 收听者, 听众 英语解释: 名词listener: someone who listens attentively 同义词:hearer, auditor, attender
Filter过滤器(重要) Javaweb中的过滤器可以拦截所有访问web资源的请求或响应操作。 1、Filter快速入门 1.1、步骤: 1. 创建一个类实现Filter接口 2. 重写接口中方法 d...
会话的解释 [conversation] 指两人以上的对话(多用于学习别种语言或方言时) 详细解释 (1).聚谈;对话。现多用于学习别种语言或方言时
会话
介绍
会话
为了实现一些功能,浏览器和服务器之间可能会产生多次的请求和响应,从浏览器访问服务器开始,到访问服务器结束(关闭浏览器、到了过期时间),这期间产生的多次请求和响应加在一起就称之为浏览器和服务器之间的一次会话
由于HTTP请求是无状态的,为了区分每个用户,此时引入了会话标识(sessionId)的概念
会话过程中所产生的一些数据,可以通过会话技术(Cookie和Session)保存
认证(Authentication)
通俗地讲就是验证当前用户的身份,证明“你是你自己”
例子
用户名密码登录
邮箱发送登录链接
手机号技收验证码
授权(Authorization)
用户授予第三方应用访问该用户某些资源的权限。
实现授权的方式有:cookie、session、token、OAuth
凭证(Credentials)
实现认证和授权的前提是需要一种媒介(证书) 来标记访问者的身份
Cookie
介绍
Cookie
客户端会话管理技术
由服务器生成的一小段文本信息,发送给浏览器,浏览器把 cookie 以kv形式保存到本地某个目录下的文本文件内,下一次请求同一网站时会把该 cookie 发送给服务器,每次请求时,把会话信息带到服务器端,从而实现多次请求的数据共享
作用
可以保存客户端访问网站的相关内容,从而保证每次访问时先从本地缓存中获取,以此提高效率
问题
cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗。
cookie有安全隐患,通过拦截或本地文件找得到cookie后可以进行攻击。
cookie有大小限制以及浏览器在存cookie的个数也有限制。
常见属性
name
Cookie的名称
必须属性
value
Cookie的值(不支持中文)
必须属性
path
Cookie的路径
重要
domain
Cookie的域名
重要
maxAge
Cookie的存活时间
重要
version
Cookie的版本号
不重要
comment
Cookie的描述
不重要
方法
Cookie(String name,String value)
构造方法创建对象
属性对应的set和get方法
赋值和获取值
添加与获取
添加
对象
HttpServletResponse
方法
void
addCookie(Cookie cookie)
向客户端添加Cookie
获取
对象
HttpServletRequest
方法
Cookie
getCookies()
获取所有的Cookie
使用
需求说明
通过Cookie记录最后访问时间,并在浏览器上显示出来
最终目的
掌握Cookie的基本使用,从创建到添加客户端,再到从服务器端获取
实现步骤
1.通过响应对象写出一个提示信息。
2.创建Cookie对象,指定name和value.
3.设置Cookie最大存活时间。
4.通过响应对象将Cookie对象添加到客户端。
5.通过请求对象获取Cookie对象。
6.将Cookie对象中的访问时间写出。
实例
注意
数量限制
每个网站最多只能有20个Cookie,且大小不能超过4KB,所有网站的Cookie总数不能超过300个。
名称限制
Cookie的名称只能包含ASCCI码表中的字母、数字字符。不能包含逗号、分号、空格,不能以$开头。
Cookie的值不支持中文。
存活时间限制setMaxAge()方法接收数字
负整数:当前会话有效,浏览器关闭则清除。
0:立即清除。
正整数:以秒为单位设置存活时间。
访问路径限制
默认路径:取自第一次访问的资源路径前缀。只要以这个路径开头就能访问到。
设置路径:setPath()方法设置指定路径。
Session
介绍
服务器端会话管理技术本质也是采用客户端会话管理cookie技术
只不过在客户端保存的是一个特殊标识,而共享的数据保存到了服务器端的内存对象中
每次请求时,会将特殊标识带到服务器端,根据这个标识来找到对应的内存空间,从而实现数据共享
session的状态信息等储存在服务器端,但是sessionId是保存客户端的cookie中,客户端不保存session
HttpSession
是Servlet规范中四大域对象之一的会话域对象
HttpSession实际上是一个接口,使用时服务器会提供该接口的实现类,仅需要获取实现类对象使用即可
作用
可以实现数据共享
认证过程
浏览器向服务器发送登录请求(post),携带账号和密码。
登录成功,服务器记录登录的状态,并创建session。
服务器返回请求响应给浏览器,响应头中携带服务器生成的sessionld(并存放于cookie中),同时Cookie记录此Sessionld届于哪个域名,作为身份标识。
浏览器再次访问服务器时,请求会自动判断此域名下是否存在Cookie信息,如果存在会将Cookie中携带的信息包括Sessionld发送给服务端。
服务器获取到浏览器发送的cookie信息后,会从中寻找Sessionld,如果找不到,则未登录
如果找到Sessionld,根据Sessionld查找对应的对象,登录成功
常用方法
void
setAttribute(String name,Object value)
设置共享数据
Object
getAttribute(String name)
获取共享数据
void
removeAttribute(String name)
移除共享数据
String
getld()
获取唯一标识名称
void
Invalidate()
让session立即失效
获取
对象
HttpServletRequest
方法
HttpSession
getSession()
获取HttpSession对象
HttpSession
getSession(boolean create)
获取HttpSession对象,未获取到是否自动创建
过程
携带JSESSIONID
没带JSESSIONID
使用
需求说明
通过第一个Servlet设置共享数据用户名,并在第二个Servlet获取到。
最终目的
掌握HttpSession的基本使用,如何获取和使用。
实现步骤
1.在第一个Servlet中获取请求的用户名。
2.获取HttpSession对象。
3.将用户名设置到共享数据中。
4.在第二个Servlet中获取HttpSession对象。
5.获取共享数据用户名。
6.将获取到用户名响应给客户端浏览器。
实例
获取的session是同一个
注意事项
唯一标识的查看
s
在代码中使用session.geiID()方法查看
浏览器禁用cookie
如果禁用cookie,不同servlet获取session对象可能不是同一个,更不能共享其中的数据
解决方式
1
通过提示信息告知用户,大部分网站采用的解决方式
推荐
2
访问时拼接jsessionid标识,通过encodeURL()方法重写地址
了解
钝化和活化
介绍
钝化
序列化。把长时间不用,但还不到过期时间的HttpSession进行序列化,写到磁盘上
活化
相反的状态,即正常的状态
何时钝化
第一种情况
当访问量很大时,服务器会根据getlastAccessTime来进行排序,对长时间不用,但是还没到过期时间的HttpSession进行序列化
第二种情况
当服务器进行重启的时候,为了保持客户HttpSession中的数据,也要对其进行序列化
注意
HttpSession的序列化由服务器自动完成,我们无需关心
Token
介绍
Token是访问资源接口(API)时所需要的资源凭证,为了减少服务器压力,避免客户端频繁向服务端请求数据,从而频繁查询数据库
token一般储存在客户端的cookie中,服务端生成后不保存token(可以存在缓存中),服务端处理每次请求,只做token的校验工作而已
常见组成方式
uid(用户唯一的身份标识) + time(当前时间的时间戳) + sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)
特点
服务端无状态化、可扩展性好
支持移动端设备
安全
支持跨程序调用
认证流程
客户端使用用户名跟密码请求登录
服务调收到请求,去验证用户名与密码
验证成功后,服务端会签发一个token并把这个token发送给客户端
客户端收到token以后,会把它存储起来,比如放在cookie里或者localstorage里
客户端每次向服务端请求资源的时候需要带着服务端签发的token
服务端收到请求,然后去验证客户端请求里面带着的token,如果验证成功,就向客户端返回请求的数据
验证方式
一
第一次登陆时,客户端传账号和密码到服务器,服务器先去查询数据库,查询到用户信息后服务器再根据自己的规则生成token并缓存(如redis等技术),再把token回传给客户端(客户端可以把token存到cookie中)
第二次登陆时,直接传token给服务器验证缓存中是否存在该token;也可以传账号密码给服务器,让服务器再次生成一次token,用这次生成的token去缓存中校验是否存在
二
每一次请求都需要携带 token,需要把 token 放到 HTTP 的 Header 里
基于 token 的用户认证是一种服务端无状态的认证方式,服务端不用存放 token 数据
用解析 token 的计算时间换取 session 的存储空间【时间换空间】,从而减轻服务器的压力,减少频繁的查询数据库
token 完全由应用管理,所以它可以避开同源策略
补充
同源策略:浏览器的行为,是为了保护本地数据不被JavaScript代码获取回来的数据污染,如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问
主题