`
yong3773
  • 浏览: 33193 次
社区版块
存档分类
最新评论

通过session校验登陆权限,浏览器和tomcat通信过程分析

 
阅读更多

 

相信大家在写服务端代码的时候都遇到过登陆权限校验的问题:没登陆的时候没法操作某些命令。

 

通用的解决方案就是通过session来控制。可大多数人对session一知半解,对于session在客服端与服务器端交互过程中的变化更是不明所以。下面就通过实例(chrome浏览器、tomcat服务器)来解析:客服端和服务器交互过程中session的变化,以及登陆权限校验。

 

第一部分:客服端和服务器交互过程中session的变化(注意 Request Headers  Response Headers

 

1.浏览器客服端第一次请求tomcat服务器端,没有带sessionid请求到了服务器,服务器返回一个sessionid给浏览器客服端

 

Remote Address:127.0.0.1:9922

Request URL:http://127.0.0.1:9922/saasapi/saasapi

Request Method:POST

Status Code:200 OK

 

Request Headers

view source

Accept:*/*

Accept-Encoding:gzip, deflate

Accept-Language:zh-CN,zh;q=0.8

Connection:keep-alive

Content-Length:90

Content-Type:text/plain;charset=UTF-8

Host:127.0.0.1:9922

Origin:chrome-extension://fhjcajmcbmldlhcimfajhfbgofnpcjmb

User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36

 

Response Headers

view source

Content-Type:application/json;charset=UTF-8

Date:Wed, 06 May 2015 02:53:24 GMT

Server:Apache-Coyote/1.1

Set-Cookie:JSESSIONID=72FAE585F7AE0642206BE0500317E4F4; Path=/saasapi/; HttpOnly 

Transfer-Encoding:chunked

 

2.浏览器再次请求服务器端,请求的时候带上之前服务器返回的sessionid,服务器端不再返回sessionid

 

Remote Address:127.0.0.1:9922

Request URL:http://127.0.0.1:9922/saasapi/saasapi

Request Method:POST

Status Code:200 OK

 

Request Headers

view source

Accept:*/*

Accept-Encoding:gzip, deflate

Accept-Language:zh-CN,zh;q=0.8

Connection:keep-alive

Content-Length:90

Content-Type:text/plain;charset=UTF-8

Cookie:JSESSIONID=72FAE585F7AE0642206BE0500317E4F4

Host:127.0.0.1:9922

Origin:chrome-extension://fhjcajmcbmldlhcimfajhfbgofnpcjmb

User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36

 

Response Headers

view source

Content-Type:application/json;charset=UTF-8

Date:Wed, 06 May 2015 02:56:21 GMT

Server:Apache-Coyote/1.1 

Transfer-Encoding:chunked

 

好,通过上面的2个步骤,就应该清楚的知道session在客服端与服务器端的变化了。既然知道session的变化了,就可以通过它,就想校验了。可校验的过程是怎样的呢?

 

第二部分:通过session进行登录权限校验

 

1.第一次请求,没有带sessionidHttpServletRequest没有session数据。

 

1)如果是登陆操作(不做用户id等信息校验):此时服务器自己生成了session,服务器自动把sessionsessionid返回给了客服端。进行登录操作,并需要手动把用户id等信息写入session中。

2)如果是非登陆操作(做用户id等信息校验):因为没有sessionid传过来,直接返回错误。此时服务器端仍然自己生成了session,并自动把sessionid返回给了客服端。

 

 

2.第二次请求,带上了sessionid。通过sessionid读取session中的用户id等信息。

1)如果是登陆操作(不做用户id等信息校验):进行登录操作,并把用户id等信息写入session中。

2)如果是非登陆操作(做用户id等信息校验):

如果此sessionid中能读到用户id等信息,说明已经登录过,通过验证,进行业务操作。

 

如果没有得到用户id相关信息,说明即使带上了sessionid,可没有进行过登录,属于非法操作,返回错误。

 

 

ok,讲解完毕。

 

 

这篇文章发了4次才发出来,期间账号被锁定3次。原因就是标题中包含服务器等等词汇,被列为了敏感词,然后账号就被锁了,被封之前也没任何提示!有敏感词点发布的时候你提醒呀,你别等发布之后锁账号删文章呀!

 

 

分享到:
评论

相关推荐

    tomcat-redis-session-manager-1.2-tomcat-7-java-7

    tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-...

    tomcat-redis-session-manager的jar包-包含Tomcat7和Tomcat8

    总结起来,Tomcat-Redis-Session-Manager通过整合Redis和Tomcat,实现了高效、可靠的session管理,特别适用于需要处理高并发和分布式部署的Web应用。其提供的jar包简化了集成过程,让开发者能快速地在Tomcat7和...

    tomcat-redis-session-manager-1.2-tomcat-6&7

    "tomcat-redis-session-manager-1.2-tomcat-6.jar" 和 "tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar" 是针对Tomcat 6和Tomcat 7的Redis Session Manager实现,这两个jar文件提供了将Tomcat的session存储...

    tomcat-redis-session-manager包集合下载(tomcat8)

    综上所述,"tomcat-redis-session-manager包集合"为使用Tomcat8和JDK1.8的开发者提供了便捷的手段,通过集成Redis来增强session管理,提升应用在分布式环境下的性能和可靠性。正确配置和使用这个工具可以显著改善...

    Tomcat8(Tomcat9)+redis实现Session共享(支持Redis集群)

    总之,通过Tomcat和Redis结合实现Session共享,不仅解决了分布式环境下的会话管理问题,还利用了Redis的高效特性,提升了系统的整体性能。这个方案对于大型、高并发的Web应用来说,是一种有效的优化策略。

    Tomcat7+Redis+Session 负载之后session 共享 tomcat jar包

    标题 "Tomcat7+Redis+Session 负载之后session 共享 tomcat jar包" 涉及的是在使用Nginx做负载均衡时,如何通过集成Redis来实现Tomcat7服务器之间的Session共享,从而确保用户在不同服务器之间切换时仍然能够保持...

    浏览器多窗口共用session引发的混乱

    在用户与Web应用交互的过程中,服务器通过Session ID来标识和区分不同的用户。通常,当用户登录后,服务器会为该用户创建一个Session,并将Session ID返回给浏览器,浏览器将其存储在Cookie中。后续请求,浏览器会...

    tomcat修改sessionId

    tomcat修改sessionId,同一台服务器部署多个tomcat需要修改sessionId,否则会出现session冲突的问题

    nginx实现多个tomcat7直接session共享所需jar包

    标题中的“nginx实现多个tomcat7直接session共享所需jar包”指的是在分布式系统环境中,使用Nginx作为反向代理服务器,将用户请求分发到多个Tomcat7应用服务器上,同时实现用户会话(Session)在这些服务器之间的...

    tomcat8+memcached session共享

    这些JAR包将集成到Tomcat的运行环境中,使Tomcat能够与Memcached通信并处理session的存储和检索。 以下是这些JAR包的作用: 1. `spymemcached-2.8.4.jar`:这是一个基于Java的Memcached客户端库,用于连接和操作...

    Tomcat8亲测可用 tomcat-redis-session-manager的jar包

    这个组件实现了将Tomcat应用服务器中的用户session数据存储到Redis分布式缓存系统中,以提高系统的可伸缩性和性能。Redis是一个高性能的键值数据库,常被用来作为缓存服务,因其速度快、数据持久化等特点,非常适合...

    tomcat-redis-session-manager-1.2-tomcat-6.jar

    用于配置 tomcat-redis-session-manager

    tomcat redis session.rar

    【标题】:“Tomcat Redis Session”指的是在Tomcat集群环境中,通过Redis来实现Session的共享与同步,以解决集群中的Session一致性问题。 【描述】:“Tomcat集群Nginx使用Redis保证Session同步”这一场景中,通常...

    ngnix tomcat7 redis session manager jar包

    标题 "ngnix tomcat7 redis session manager ...通过这种方式,你可以实现跨多个Tomcat实例的session共享,提高服务的可扩展性和容错性。在实际操作中,你需要理解每个组件的作用,并正确配置它们以适应你的特定环境。

    session 共享 tomcat-redis-session-manager 所需要的jar (绝对可用)

    3. "tomcat-cluster-redis-session-manager-3.0.jar":这是Tomcat Redis Session Manager的核心组件,实现了Tomcat的Session监听器和Manager接口,使得Tomcat能够将Session数据存储到Redis中,并在需要时从Redis中...

    tomcat-redis-session-manager

    值得注意的是,使用`tomcat-redis-session-manager`可能会带来额外的网络延迟,因为每次session操作都需要与Redis通信。因此,在大型分布式系统中,推荐将Redis部署在靠近应用服务器的网络位置,以减少延迟影响。 ...

    tomcat-redis-session-manager实现session共享 配置文件

    Tomcat-Redis-Session-Manager是基于Apache Tomcat的Session管理器,通过集成Redis作为Session持久化存储,实现了跨服务器的Session共享。它将Tomcat中的Session数据序列化后存储到Redis中,当需要时再从Redis中读取...

    tomcat7+redis单点 session共享jar

    本资源"tomcat7+redis单点 session共享jar"提供了针对Tomcat7服务器和Redis数据存储的一个解决方案,以实现跨服务器的session共享。 **Tomcat7** 是一个广泛使用的开源Java Servlet容器,它实现了Java EE的Web应用...

    tomcat9+tomcat-cluster-redis-session-manager_4.0.zip

    集成Tomcat集群和Redis Session Manager的过程大致如下: 1. 安装和配置Redis服务器:首先,你需要设置一个运行的Redis实例,它可以是本地的或者远程的。 2. 集成Tomcat集群:修改Tomcat的server.xml文件,配置...

Global site tag (gtag.js) - Google Analytics