一、问题描述:

当访问一个需要登录的页面时,会有过滤器或者拦截器进行过滤拦截,如果用户没有登录,则跳转到登录页面。

当用户已经登录进入系统后,然后长时间没操作,等到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请求及处理过程详解相关推荐

  1. java 请求url 返回数据_java后台发起get请求获取响应数据|chu

    本文实例为大家分享了java后台发起get请求获取响应数据,供大家参考,具体内容如下 学习记录: 话不多说直接上代码: package com.jl.chromeTest; import java.i ...

  2. java中乱码产生的原因_java出现乱码的原因与解决方法详解

    java在字符串中统一用Unicode表示.(推荐:java视频教程) 对于任意一个字符串:String string = "测试字符串"; 如果源文件是GBK编码,操作系统默认环 ...

  3. java 多个类共用属性_java中读写Properties属性文件公用方法详解

    前言 大家都知道Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改 ...

  4. java实现图表步骤_Java 在PPT中添加混合图表过程详解

    本文将介绍通过Java程序在PPT幻灯片中添加混合图表的方法,即,将不同类型的图表类型放置在同一图表中,用于展示同一时期或阶段的数据在不同参数标准下的变化情况,便于对数据的综合分析. 使用工具:Fre ...

  5. java string反射_Java 通过反射变更String的值过程详解

    目的 变更String对象里面的值 方法 采用反射技术,获取String里面的值,并改变 代码 通过反射技术替换掉String里面的值 package com.pojo; import java.la ...

  6. java中double的使用方法_java中double型数据如何四舍五入?详解

    下面以保存两位有效数字为例. 1.首先我们想到用先乘以100取整后再除以100.0这种做法: System.out.println(Math.round(4.015*100)/100.0); 执行结果 ...

  7. java重载与重写的例子_java 重载(overload)与重写(override)详解及实例

    很多同学对于overload和override傻傻分不清楚,建议不要死记硬背概念性的知识,要理解着去记忆. 先给出我的定义: overload(重载):在同一类或者有着继承关系的类中,一组名称相同,参 ...

  8. java 循环查询list_Java用list储存,遍历,查询指定信息过程详解

    需求说明 实现思路 见代码注释 代码内容 使用list储存,遍历,查询,删除 import java.util.ArrayList; import java.util.List; /** * @aut ...

  9. Linux中的mate程序的进程,终端下以后台模式运行Linux程序的过程详解

    这是一个简短但是非常有用的教程:它向你展示从终端运行Linux应用程序的同时,如何保证终端仍然可以操作. 在Linux中有许多方式可以打开一个终端,这主要取决于你的发行版的选择和桌面环境. Linux ...

  10. java判断或_Java判断用户名和密码是否符合要求过程详解

    这篇文章主要介绍了Java判断用户名和密码过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 假设在某仓库管理系统的登录界面中需要输入用户名和密 ...

最新文章

  1. 104.二叉树的最大深度
  2. Expression Blend学习动画基础
  3. 开发函数计算的正确姿势——运行 Selenium Java
  4. 通过 crontab将linux中的top信息写入文件中
  5. mysql表单查询_表单查询实例
  6. vue —— vuex namespaced模块化编码
  7. BZOJ solve 100 纪念
  8. Ramfs、rootfs 和initramfs
  9. UCOIII时间片轮转调度
  10. 生物安全实验室送排风设计标准
  11. 第二章 基本放大电路
  12. ManageEngine云ITSM系统助斯德雷特(Sterlite)年处理5万个工单
  13. How I Hacked Facebook with a Word Document
  14. mysql useing_MySQL ON与USING?
  15. mysql表情符存储设置
  16. java菜鸟1:jdk 安装
  17. Oracle 计算表中的时间与当前时间差
  18. css中背景图片路径问题
  19. 初探Azure Synapse
  20. JavaScript-function函数的arguments对象

热门文章

  1. XEIM 飞鸽传书数据库说明
  2. 中文名称:案例编程MOOK系列
  3. 35岁大龄程序员都去哪了?一位网友分享的身边几个真实案例,过于真实!!
  4. 程序员要掌握的20个实用技巧
  5. 12月12日习题答案大剖析!再接再厉
  6. python网络爬虫与信息提取视频_Python网络爬虫与信息提取入门5
  7. Circulation:吃鸡蛋量多,死亡风险增加?
  8. 对发表论文的深层次思考
  9. Mac操作指南:Mac Monterey实况文本功能如何开启和关闭?
  10. 【原型设计】第五节:Axure RP9 交面交互的使用说明 02 显示隐藏元素