Web利用session验证是否登陆

需求:

用户为老师,登陆客户端桌面软件,可以上传视频到服务器以便在前端页面展示。老师通过客户端界面上的“查看我的视频”跳转到浏览器向服务器发送请求获取自己上传的视频列表。为了防止用户通过在浏览器直接输入地址访问的情况,要对浏览器请求视频列表进行验证,确保请求是老师登陆后由客户端触发。

问题:

通常情况下验证用户登陆状态,只需要服务器在用户登陆时在当前会话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中,像一般情况下验证即可

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值