java 判断请求为 ajax请求_Java后台判断ajax请求及处理过程详解
一、问题描述:
当访问一个需要登录的页面时,会有过滤器或者拦截器进行过滤拦截,如果用户没有登录,则跳转到登录页面。
当用户已经登录进入系统后,然后长时间没操作,等到session过期后,再点击一个ajax请求操作时,这时再跳转到登录页面就不合适了,因为这是ajax操作,拦截后跳到页面返回的结果js识别不了。
二、解决方法:
在过滤器或者拦截器上做识别,针对页面跳转请求和ajax请求分别处理。
页面跳转的不再详说,现在说的是ajax请求。
直接贴代码:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component("authenticationFilter")
public class AuthenticationFilter implements Filter {
@Autowired
SessionContext sessionContext;
private Logger log = LoggerFactory.getLogger(AuthenticationFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse) response;
//判断是否为ajax请求,默认不是
boolean isAjaxRequest = false;
if(!StrUtils.isBlank(req.getHeader("x-requested-with")) && req.getHeader("x-requested-with").equals("XMLHttpRequest")){
isAjaxRequest = true;
}
SysUser sysUser = sessionContext.getSysUserFromSession(req);
if (sysUser != null && sysUser.getUserId() != null) {
chain.doFilter(req, res);
}else{//Session用户为空,登录过期
if(isAjaxRequest){// 如果是ajax请求,则不是跳转页面,使用response返回结果
res.setHeader("noAuthentication", "true");
ResultWithObject resultWithObject = new ResultWithObject(CC.NEGATIVE_1, CC.RESULT_MESSAGE_TEXT_DEFAULT);
resultWithObject.setMsg("登录已失效,请刷新页面或重新登录!");
res.setContentType("application/json;charset=UTF-8");
PrintWriter writer = res.getWriter();
writer.write(JasonUtils.Object2String(resultWithObject));
writer.close();
res.flushBuffer();
}else{
res.sendRedirect("http://xxxx.com/loginUI");
}
}
}
@Override
public void destroy() {
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
时间: 2020-03-17
java 判断请求为 ajax请求_Java后台判断ajax请求及处理过程详解相关推荐
- java 请求url 返回数据_java后台发起get请求获取响应数据|chu
本文实例为大家分享了java后台发起get请求获取响应数据,供大家参考,具体内容如下 学习记录: 话不多说直接上代码: package com.jl.chromeTest; import java.i ...
- java中乱码产生的原因_java出现乱码的原因与解决方法详解
java在字符串中统一用Unicode表示.(推荐:java视频教程) 对于任意一个字符串:String string = "测试字符串"; 如果源文件是GBK编码,操作系统默认环 ...
- java 多个类共用属性_java中读写Properties属性文件公用方法详解
前言 大家都知道Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改 ...
- java实现图表步骤_Java 在PPT中添加混合图表过程详解
本文将介绍通过Java程序在PPT幻灯片中添加混合图表的方法,即,将不同类型的图表类型放置在同一图表中,用于展示同一时期或阶段的数据在不同参数标准下的变化情况,便于对数据的综合分析. 使用工具:Fre ...
- java string反射_Java 通过反射变更String的值过程详解
目的 变更String对象里面的值 方法 采用反射技术,获取String里面的值,并改变 代码 通过反射技术替换掉String里面的值 package com.pojo; import java.la ...
- java中double的使用方法_java中double型数据如何四舍五入?详解
下面以保存两位有效数字为例. 1.首先我们想到用先乘以100取整后再除以100.0这种做法: System.out.println(Math.round(4.015*100)/100.0); 执行结果 ...
- java重载与重写的例子_java 重载(overload)与重写(override)详解及实例
很多同学对于overload和override傻傻分不清楚,建议不要死记硬背概念性的知识,要理解着去记忆. 先给出我的定义: overload(重载):在同一类或者有着继承关系的类中,一组名称相同,参 ...
- java 循环查询list_Java用list储存,遍历,查询指定信息过程详解
需求说明 实现思路 见代码注释 代码内容 使用list储存,遍历,查询,删除 import java.util.ArrayList; import java.util.List; /** * @aut ...
- Linux中的mate程序的进程,终端下以后台模式运行Linux程序的过程详解
这是一个简短但是非常有用的教程:它向你展示从终端运行Linux应用程序的同时,如何保证终端仍然可以操作. 在Linux中有许多方式可以打开一个终端,这主要取决于你的发行版的选择和桌面环境. Linux ...
- java判断或_Java判断用户名和密码是否符合要求过程详解
这篇文章主要介绍了Java判断用户名和密码过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 假设在某仓库管理系统的登录界面中需要输入用户名和密 ...
最新文章
- 104.二叉树的最大深度
- Expression Blend学习动画基础
- 开发函数计算的正确姿势——运行 Selenium Java
- 通过 crontab将linux中的top信息写入文件中
- mysql表单查询_表单查询实例
- vue —— vuex namespaced模块化编码
- BZOJ solve 100 纪念
- Ramfs、rootfs 和initramfs
- UCOIII时间片轮转调度
- 生物安全实验室送排风设计标准
- 第二章 基本放大电路
- ManageEngine云ITSM系统助斯德雷特(Sterlite)年处理5万个工单
- How I Hacked Facebook with a Word Document
- mysql useing_MySQL ON与USING?
- mysql表情符存储设置
- java菜鸟1:jdk 安装
- Oracle 计算表中的时间与当前时间差
- css中背景图片路径问题
- 初探Azure Synapse
- JavaScript-function函数的arguments对象