什么叫做用户认证与授权(一)

1、为什么需要认证?

HTTP是一种无状态的协议,这就导致一个问题:用户登录以后,下一次请求,还是需要用户进行认证的。(这样的话就是说,用户每次访问都要登录,这样非常不方便)

在互联网发展初期,Web基本上只是内容的浏览而已,服务器不需要记住每个浏览请求的状态,换句话说,服务器不需要有任何的状态信息,每次客户端的请求都是新的请求,这也是http无状态一个很明显的表现。随着互联网大潮的到来,尤其是像在线购物等这种和用户关系密切的系统的大量兴起,系统需要辨识出用户,以便进行各种业务操作,这种需求给Http无状态这种特性一个强烈的冲击,所以最终的解决方案就是客户端请求的时候携带着一种标识,这种标识每个用户不同,这样服务端就可以根据这个标识区分出不同的客户端用户了,这也就诞生了用户认证这个概念。

2、认证和授权的区别?

认证和授权是两个不同的概念,更是两个不同的阶段,绝大多数带有认证和授权的系统,在用户操作流程上都是先进行认证,之后根据认证的结果再进行授权操作,有的初学者容易混淆二者的概念。举一个很简答的栗子:一个OA系统,在用户登录成功之后,一般左侧都会根据当前用户的不同角色或者权限出现不同操作的菜单树,其中用户登录这个过程就是认证的过程,而左侧的菜单树就是对当前用户的授权的一个具体表现形式(当然有的系统可能不这样做,但不代表没有授权的流程)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1vYq4AKS-1666687663720)(https://segmentfault.com/img/remote/1460000023856628 “image”)]

认证是用来证明一个用户身份的操作流程,授权是用来给当前用户赋予权限的操作流程。

3、什么叫做会话 session?

认证是针对会话来说的。

用户打开浏览器,进行一系列操作,然后最终将浏览器关闭,这个整个过程叫做:一次会话(session)

当用户在浏览器发送第一次请求后,服务器会新建一个session对象,并响应一个对应的Cookie给浏览器,并由浏览器保存在内存中。

当用户继续发送或多次发送请求时,保存的Cokie编号会在服务器中找到对应的session对象。所以这时的session对象都是同一个。

再次访问浏览器的时候,已经不能通过之前的Cookie找到对应的session对象了,这次的会话是新的一次会话,服务器会重写创建一个新的session对象和对应的Cookie。

当用户关闭浏览器后,意味着当前这次的会话结束,浏览器当前保存的Cookie会被清除。

4、Session的相关理解

问题:

1、为什么不使用request对象保存会话状态?为什么不使用ServletContext对象保存会话状态?request.setAttribute()存,request.getAttribute()取,ServletContext也有这个方法。

  • request是请求域。ServletContext是应用域。

    • request是一次请求一个对象。

    • ServletContext对象是服务器启动的时候创建,服务器关闭的时候销毁,这个ServletContext对象只有一个。ServletContext对象的域太大。

    • request请求域(HttpServletRequest)、session会话域(HttpSession)、application域(ServletContext)

    • request < session < application

2、Cookie被浏览器禁用了,session对象还能找到吗?

  • cookie禁用是什么意思?服务器正常发送cookie给浏览器,但是浏览器不要了。拒收了。并不是服务器不发了。

  • 找不到了。每一次请求都会获取到新的session对象。

  • cookie禁用了,session机制还能实现吗?

3、request.getSession()都做了什么?

//获取session的Id

String sessionId = session.getId();

//将session的Id存储到名字为JSESSIONID的cookie中

Cookie cookie = new Cookie(“JSESSIONID”, sessionId);

//设置cookie的有效路径

cookie.setPath(request.getContextPath());

response.addCookie(cookie);

4、sessionID是否可以根据这个值,获得session对象?

答案是肯定的,通过sessionID,是有函数可以获得具体的session对象的,从而这么做了以后,才实现了已经登录的判断。在集群环境下,也是如此判断才实现的。

5、Session认证

因为根据HTTP协议,我们并不能知道是哪个用户发出的请求,所以为了我们的应用可以识别是哪个用户发起请求,我们只能在服务器中存储一份用户的登录信息,这份登录信息会在响应时传递给浏览器,并告诉浏览器保存为Cookie,下次请求时带上这份登录信息,这样我们的应用就可以识别是哪个用户发起的请求了,这就是传统的基于Session认证。

在这里插入图片描述

session工作原理:
1、客户端提交登陆请求,把账号密码提交到服务器验证;
2、服务器验证通过,在服务器开辟内存记录人的信息,生成cookie字符串,通过响应的形式发送给客户端;
3、客户端收到cookie,浏览器保存起来;
4、客户端再次发起请求,浏览器会自动把所有可用的cookie发送给服务器端;
5、服务器端收到cookie后从内存中查找对应信息,找到则证明用户验证成功,针对用户生成特定页面响应给客户端;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值