需求:
用户为老师,登陆客户端桌面软件,可以上传视频到服务器以便在前端页面展示。老师通过客户端界面上的“查看我的视频”跳转到浏览器向服务器发送请求获取自己上传的视频列表。为了防止用户通过在浏览器直接输入地址访问的情况,要对浏览器请求视频列表进行验证,确保请求是老师登陆后由客户端触发。
问题:
通常情况下验证用户登陆状态,只需要服务器在用户登陆时在当前会话session中设置一个变量:session.setAttribute(arg1,arg2);然后在下一次请求时验证这个变量值是否存在并和之前设置的值相同。
当前情况是浏览器请求和客户端请求不在同一个session,浏览器的请求产生一个新的session,不能通过session范围的变量来判断浏览器请求是否来自客户端登陆用户。
解决方法:
java中有static关键词,用来定义静态变量,也就是java中的全局变量,在类对象创建之前就创建,并且不需要创建类的对象即可直接调用,储存在内存中(有待考证)。
在类TeacherService中定义静态变量SESSION_MAP
public static Map<String,HttpSession> SESSION_MAP=new HashMap<>();
客户端老师登陆时,添加当前session
session.setAttribute(TeacherService.LOGGED_IN_TEACHER_KEY,teacher.getId());
TeacherService.SESSION_MAP.put(session.getId(),session);
客户端触发浏览器时,将当前session(session_c)的id作为参数或url的一部分,通过浏览器请求发送到服务器,服务器获取该参数,通过id获取之前的session(session_c):
@RequestMapping(value="/webteacher/{teacherId}/{sessionId}/videos")
public ModelAndView getVideoList(@PathViariable String sessionId,HttpSession session,@PathViariable long teacherId){
HttpSession session_c=TeacherService.SESSION_MAP.get(sessionId);
Object ob=cursession.getAttribute(TeacherService.LOGGED_IN_TEACHER_KEY);
//验证老师是否登陆
if(ob==null){
return null;
}
long log_in=(long)ob;
if(log_in!=teacherId){
return null;
}
//在当前session,浏览器与服务器之间的session,定义变量
ModelAndView mav=new ModelAndView("teacher_videos");
session.setAttribute(TeacherService.LOGGED_IN_TEACHER_KEY, teacherId);
return mav;
}
之后浏览器的请求都在同一个session中,像一般情况下验证即可
分享到:
相关推荐
javaweb中用到的用户密码验证码一体的登录例子,主要是利用session原理的例子。
同会员登陆验证方式类似,管理的登陆验证也是通过对“session”赋值以及在后面的操作中对这个变量进行验证来确保管理员的合法身份。本系统的身份验证都是通过对“session”变量的赋值和后续操作中
二、通过利用ASP.NET Forms验证模式 可以实现子域名(SubDomain)共享登陆下的缺陷 要利用Asp.NET Form验证模式实现 同一主域下不同子域名共享登陆状态需要进行以下配置 配置Web.config 1.把Asp.net的认证模式...
1. 编写一个简单的网上商店,用application对象存放网上的商品清单 和库存量,用session对象存放用户的购买信息(用户名、商品名及购买数量),然后利用这些信息给用户结账。 2. 利用Cookie实现用户的自动登录功能。...
Session的作用时间为从用户到达某个特定的Web页开始,到该用户离开Web站点,或在程序中利用代码终止某个Session结束。引用Session 则可以让一个用户访问多个页面之间的切换也会保留该用户的信息。系统为每个访问者...
第一章:asp.net和web窗体 6 1.1 NET应用开发架构简介 6 1.1.1. NET框架结构 6 1.1.2 http协议简介 6 1.1.3 静态网页与动态网页 8 1.1.4 客户端代码与服务器端代码 8 1.1.5 ASP.NET简介 8 1.2 Web 窗体与ASP.NET页面...
登陆,注册:利用ajax验证用户名是否存在,登陆验证码防止恶意注册,session中存储用户判断用户是否登陆,对servlet进行了优化,在我的账户可以退出,也可以更新用户信息,更新用户信息需重新登录,还可以查看用户...
还内建了参数映射、参数验证等等传统Web MVC框架所支持的功能。 4. 内建了自己特有的导航对象栈的概念,对于支持传统的Web应用的开发(基于浏览器的导航)非常有帮助。 5. 提供了JSP标签库,对于传统的基于HTML...
检测is_email_verify邮箱是否通过验证,未通过进入verify_form.jsp c.更新最后一次登录时间last_login_time和IP地址last_login_ip。 d.将用户信息放入session。 e.都正确进入/main/main.jsp 4.main.jsp页面的页眉...
Tomcat要支持memcached管理Session,需要调用一些jar库文件如下(网上有的文章中可能所说的jar包不全,或者版本不样的会报错,但这里我已经经过验证了): 1) couchbase-client-1.2.2.jar 2) javolution-5.5.1....
编程环境为VS 2019。 利用C#和ASP.NET Form编程...并且添加了session页对象实现了内容的提交。 购物车可以跟购物站实现联动,并在购物车页面实现简单的信息显示和合计清空功能。 注册若是成功会在5秒后跳转至登陆界面。
目的: 利用C++语言的高效, 稳定和灵活性,创建一个通用的通讯平台; 服务器端以插件配置方式动态加入功能组件; 客户端以XML文本描述方式, 调用服务端功能组件的函数; 服务端也同样以XML文本描述调用返回结果,...
域传送漏洞检测、利用 DNS字典爆破 Google Hacking搜索 注:支持输出到html文件,使用*-o xxx.html*做为输出文件即可 例如: # 使用域传送技术、Google Hacking对aaa.com 进行子域名爆破 pen.py domamin aaa....
5.8 Session—管理用户会话状态 93 5.9 计数器示例 96 5.10 Global.asax 98 5.11 使用Viewstate保持窗体状态 99 5.12 把视图状态用作数据存储 100 5.13 利用查询字符串传递数据 101 5.14 利用隐藏的窗体字段传递数据...
技巧 19:利用浏览器的验证能力 技巧 20:在循环中避免字符串串联 技巧 21:启用浏览器和代理缓存 技巧 22:尽可能使用 Server.Transfer 替代 Response.Redirect 技巧 23:在目录 URL 尾部加斜线 技巧 24:避免...
21.2 实例——利用AXIS开发一个简单的Web Service 310 21.3 小结 314 第22章 Java EE的安全 315 22.1 利用JAAS进行验证和授权 315 22.2 利用JSSE进行安全传输 317 22.3 小结 317 第23章 Java EE的测试 ...
利用C 语言的高效, 稳定和灵活性,创建一个通用的通讯平台; 服务器端以插件配置方式动态加入功能组件; 客户端以XML文本描述方式, 调用服务端功能组件的函数; 服务端也同样以XML文本描述调用返回结果, 类似于XML-PRC...
利用C 语言的高效, 稳定和灵活性,创建一个通用的通讯平台; 服务器端以插件配置方式动态加入功能组件; 客户端以XML文本描述方式, 调用服务端功能组件的函数; 服务端也同样以XML文本描述调用返回结果, 类似于XML-PRC...
作为一个Servlet的开发者,你必须决定你的Web应用是否处理客户机不加入或不能加入Session。服务器会在Web服务器或Servlet规定的时间内维持一个Session对象。当Session终止时,服务器会释放Session对象以及所有绑定在...