登陆拦截拦截ajax,过滤器实现登录拦截需要注意的问题(AJAX请求的处理)

1.问题描述:

最近自己在写demo时遇到一个问题,在ajax请求时用Filter做登录拦截,结果页面不跳转(Ajax是不能做转发和重定向的)、、、、

最终的最终在同事zt的提示下,恍然大悟,虽然很基本的问题,但也纠结了好久,只能说太菜,记录下来,以免以后再犯。

2.解决办法:

在doFilter方法中判断是否为Ajax请求,做进一步处理

代码如下:

/**

* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)

*/

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {

HttpServletResponse resp=(HttpServletResponse) response;

HttpServletRequest req=(HttpServletRequest) request;

String url = req.getRequestURI();

System.out.println(url);

HttpSession session = ((HttpServletRequest) request).getSession();

String path = req.getContextPath();

String basePath= req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+path+"/";

basePath=basePath+"rest/userManager/loginOut";

try {

// 过滤掉登陆和退出请求

if ((url.indexOf("/ddoa/rest/userManager/login") >= 0)|| (url.indexOf("/ddoa/rest/userManager/loginOut") >= 0)) {

chain.doFilter(request, response);

} else {

if (null != session) {

Map map = (Map) session.getAttribute("userMap");

if(null!=map){

chain.doFilter(request, response);

}else{

//1:判断是否是ajax请求

if (req.getHeader("x-requested-with") != null&& "XMLHttpRequest".equalsIgnoreCase(req.getHeader("x-requested-with"))) {

//向http头添加 状态 sessionstatus

resp.setHeader("sessionstatus","timeout");

resp.setStatus(403);

//向http头添加登录的url

resp.addHeader("loginPath", basePath);

chain.doFilter(request, response);

return ;

}else{

resp.sendRedirect(basePath);

}

}

} else {

//1:判断是否是ajax请求

if (req.getHeader("x-requested-with") != null&& "XMLHttpRequest".equalsIgnoreCase(req.getHeader("x-requested-with"))) {

//向http头添加 状态 sessionstatus

resp.setHeader("sessionstatus","timeout");

resp.setStatus(403);

//向http头添加登录的url

resp.addHeader("loginPath", basePath);

chain.doFilter(request, response);

return ;

}else{

resp.sendRedirect(basePath);

}

}

}

} catch (IOException | ServletException e) {

e.printStackTrace();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

半圆阴影_六年级数学:怎么求阴影部分面积?正方形与半圆,割补法常考题

欢迎您来到方老师数学课堂,请点击上方蓝色字体,添加关注。所有的视频内容,全部免费,请大家放心关注,放心订阅。六年级数学:怎么求阴影部分面积?正方形与半圆,割补法常考题。大家先在…

c语言判断整数_用c++编写闰年的判断基础程序

其实c语言与c语言有太多共同的东西,学习过c语言再学习c语言就显得轻而易举。当然学过了c再去学习c语言也是有一些帮助的(但是个人不提倡先学习c在学c语言)。由于现在经常看见有关闰年的程序,风式各样,眼花缭乱,些许凌乱&#xff0…

cat日志 搜索_大日志,看我如何对付你

在服务器接口测试中,我们经常会和各种日志打交道。一旦测试时服务端出现了问题,而单凭服务端的日志又不能发现问题原因的时候,往往开发要向我们测试人员询问客户端这边的情况,希望看看我们能不能提供一些有用信息,如错…

python编译成dll文件_用vc生成可被python调用的dll文件

前提已经有.c 和.i文件 用swid编译了.i文件生成了wrap.c文件和.py文件 vc创建dll工程 将.h加入到头文件中.c文件和wrap.c文件添加到源文件中 将.i文件添加到工程目录下 Tools->Options->Directories中修改include 和lib 添加python里的include 和libs 把\libs\python27.l…

加载gif动图_GIF生成神器——ScreenToGif

每次需要做一个动图展示时,总是感觉很头疼。截图吧,需要的图片太多;录视频吧,文件太大;做动图吧,太麻烦。今天推荐的这个软件或许能够解决大家这个困惑,今天推荐的是动图生成神器——ScreenToGi…

vue底部选择器_vue实现动态显示与隐藏底部导航的方法分析

vue实现动态显示与隐藏底部导航的方法分析本文实例讲述了vue实现动态显示与隐藏底部导航的方法。分享给大家供大家参考,具体如下:在日常项目中,总有几个页面是要用到底部导航的,总有那么些个页面,是不需要底部导航的&a…

java 修改最大nio连接数_关于java流的几个概念:IO、BIO、NIO、AIO,有几个人全知道?...

关于同步、阻塞的知识我之前的文章有介绍,所以关于流用到这些概念与之前多线程用的概念一样。下面具体来看看java中的几种流IO/BIOBIO就是指IO,即传统的Blocking IO,即同步并阻塞的IO。这也是jdk1.4之前的唯一选择,依赖于ServerSocket实现&am…

python神秘的魔法函数_python魔法函数

一、参考二、构造和初始化2.1 __new__在对象实例化过程中最先调用的方法是__new__, 该方法接收参数为类,然后将其他参数,传递给__init__, 该魔法函数比较少见,可以使用其,创建单例类; __new__方法是一个类方法,需要携带…

python扫雷 广度优先_广度优先搜索(BFS)解题总结

定义 广度优先搜索算法(Breadth-First-Search),是一种图形搜索算法。 简单的说,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。 如果所有节点均被访问,则算法中止。 BFS同样属于盲目搜索。 一般用队…

python默认参数陷阱_python默认参数陷阱

0|1陷阱?学过函数的人一定听说过函数的默认参数,关于函数的默认参数,请看以下的例子:def extendList(val, lst[]):lst.append(val)return lstlist1 extendList(10)list2 extendList(123, [])print(list1 %s % list1)print(list…

python裁剪图片并保存_python – 如何从图像中剪切轮廓并将其保存到新文件中

大家好,这是我的第一个问题所以请保持温和.我有一个计算机视觉领域的项目,我是新的,我会很感激一些帮助.我有一个pcb的图像,我的(首先)任务是从背景中切断电路板并将其保存到新文件.如果结果只是没有灰色背景的普通pcb,那就没问题了. 我到目前为止尝试的是,首先使用阈值将图像转…

opencv如何把一个矩阵不同列分离开_学习OPEN_CV

OpenCv中文论坛精华地址http://www.opencv.org.cn/index.php/User:Ollydbg23http://sivp.sourceforge.net/(sivp)一、基础操作1. 数据类型 数据结构了解图像相关:cvArr cvMat IplImage数据数组的维数, 与数据的通道数 见P46 (76)2. 常见的矩阵操作熟悉3…

python文件合并_用Python 将两个文件的内容合并成一个新的文件.

一个文件的内容是:IntroductiontoProgramming,NetworkingFundamentals,InternetworkingTechnologies,PlatformTechnologies,InformationTechnologyforUsers,ComputerForensics,Enterpr... 一个文件的内容是: Introduction to Programming, Networking Fundamentals, Internetwo…

flash代码_Flash如何对制作文件进行优化

对FLASH进行优化分为两方面,一方面是代码上的优化,主要是通过优化提高FLASH性能,降低CPU占用和内存使用。另一方面是资源的优化,这方面的优化是为了减小编译后的文件大小以及制作文件的大小,因为如果不进行相应的优化&…

潜流式湿地计算_人工湿地计算书

人工湿地计算书1、尾水提升泵房集水池基本参数集水池设计规模为30000m3/d,约折合1250m3/h,按水力停留时间HRT为0.25 h计,集水井有效容积应为312.5 m3,考虑到与污水厂原有排污管道相契合,集水设计尺寸为:LBH…

deepin系统转为windows_windows系统下安装深度系统deepin

前期准备DiskGenius(用来扩展分区)deepin-20-amd64.iso(深度系统镜像文件)相关文件下载首先下载安装时要用的工具,分别为:DiskGenius , UltraISODiskGenius是一款磁盘工具,创建系统分区。UltraISO是用来打开系统光盘镜像文件工具。Win8/8.1/10无需下载Ul…

c3等待加载样式 vue_Vue.js__简易加载等待动画

Vue.js__简易加载等待动画Vue实现为览或讲琐了过自系一读页围这就多网解元当维自加,加载动画的样式取自其他出处,侵直分调浏器代,刚求的一学础过功互有解小久宗点差维含数删。将Vue属性览或讲琐了过自系一读页围这就多网解元当维和方法复制到…

软件开发模型_QT开发(二十三)——软件开发流程

一、软件开发流程简介软件开发流程是通过一系列步骤保证软件产品的顺利完成,是软件产品在生命周期内的管理学。软件开发流程的本质是软件开发流程与具体技术无关,是开发团队必须遵守开的规则。二、常见软件开发流程模型常见的软件开发流程模型包括即兴模…

python循环语句for计数_Bash For循环(递增计数)与for循环用法详解

先来看for循环的例子&#xff1a;用Bash Shell的for循环&#xff0c;每次递增数是500。复制代码 代码示例:#!/bin/bash##每次递增的数ADD_NUM500#递增1的话取消下行注释&#xff0c;并相应的注释另一句for的开头的#for ((i1;i<29500;i))#递增定义的数for ((i1;i<29500;i$…

python3.6.2用pyinstaller3.4报错_OceanBase 2.2 版本体验:用 BenchmarkSQL 跑 TPC-C

OB君&#xff1a;好消息&#xff01;「 OceanBase 2.2 版本 」正式上线官网啦&#xff01;&#xff08;点击阅读原文即可直接下载&#xff09;OceanBase 2.2版本是成功支撑2019年天猫双11大促的稳定版本&#xff0c;同时也是用于TPC-C测试且荣登TPC-C性能榜首的版本。我们将在接…