Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

©Copyright 蕃薯耀 2017年8月10日

http://www.cnblogs.com/fanshuyao/

一、问题描述:

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

当用户已经登录进入系统后,然后长时间没操作,等到session过期后,再点击一个ajax请求操作时,这时再跳转到登录页面就不合适了,因为这是ajax操作,拦截后跳到页面返回的结果js识别不了。

二、解决方法:

在过滤器或者拦截器上做识别,针对页面跳转请求和ajax请求分别处理。

页面跳转的不再详说,现在说的是ajax请求。

直接贴代码:

  1. import java.io.IOException;
  2. import java.io.PrintWriter;
  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Component;
  15. @Component("authenticationFilter")
  16. public class AuthenticationFilter implements Filter {
  17. @Autowired
  18. SessionContext sessionContext;
  19. private Logger log = LoggerFactory.getLogger(AuthenticationFilter.class);
  20. @Override
  21. public void init(FilterConfig filterConfig) throws ServletException {
  22. }
  23. @Override
  24. public void doFilter(ServletRequest request, ServletResponse response,
  25. FilterChain chain) throws IOException, ServletException {
  26. HttpServletRequest req = (HttpServletRequest)request;
  27. HttpServletResponse res = (HttpServletResponse) response;
  28. //判断是否为ajax请求,默认不是
  29. boolean isAjaxRequest = false;
  30. if(!StrUtils.isBlank(req.getHeader("x-requested-with")) && req.getHeader("x-requested-with").equals("XMLHttpRequest")){
  31. isAjaxRequest = true;
  32. }
  33. SysUser sysUser = sessionContext.getSysUserFromSession(req);
  34. if (sysUser != null && sysUser.getUserId() != null) {
  35. chain.doFilter(req, res);
  36. }else{//Session用户为空,登录过期
  37. if(isAjaxRequest){// 如果是ajax请求,则不是跳转页面,使用response返回结果
  38. res.setHeader("noAuthentication", "true");
  39. ResultWithObject resultWithObject = new ResultWithObject(CC.NEGATIVE_1, CC.RESULT_MESSAGE_TEXT_DEFAULT);
  40. resultWithObject.setMsg("登录已失效,请刷新页面或重新登录!");
  41. res.setContentType("application/json;charset=UTF-8");
  42. PrintWriter writer = res.getWriter();
  43. writer.write(JasonUtils.Object2String(resultWithObject));
  44. writer.close();
  45. res.flushBuffer();
  46. }else{
  47. res.sendRedirect("http://xxxx.com/loginUI");
  48. }
  49. }
  50. }
  51. @Override
  52. public void destroy() {
  53. }
  54. }

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

©Copyright 蕃薯耀 2017年8月10日

http://www.cnblogs.com/fanshuyao/

Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求的更多相关文章

  1. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求   Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java ...

  2. Java 过滤器Filter,Java Filter 不拦截某些请求 Java 过滤器支持Ajax请求

    ================================ ©Copyright 蕃薯耀 2020-01-10 https://www.cnblogs.com/fanshuyao/ 一.Java ...

  3. Java过滤器与SpringMVC拦截器的差异学习笔记

    学习摘录地址:http://blog.csdn.net/chenleixing/article/details/44573495 今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了 ...

  4. java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例

    java 过滤器Filter: package com.sun.test.aircraft.filter;import javax.servlet.*;import java.io.IOExcepti ...

  5. Java过滤器(Filter)与SpringMVC拦截器(Interceptor)之间的关系与区别

    过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对action请求起作用,而过滤 ...

  6. java过滤器、监听器、拦截器机制

    一.过滤器 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ...

  7. JAVA过滤器与SpringMVC拦截器之间的区别

    今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊, 而且看的比较粗浅,没有一个全局而又细致的认识,由于已至 ...

  8. Java过滤器与SpringMVC拦截器之间的关系与区别

    今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深 ...

  9. Java过滤器,SpringMVC拦截器之间的一顺序点关系

    由于最近做的项目中有一部分是接口远程调用,用到了接入权限和业务权限的鉴定,需要采用SpringMVC的拦截器,以前用Struts2的时候用过拦截器,而SpringMVC的拦截器功能之前没研究过,所以这 ...

随机推荐

  1. 玩转UITableView系列(一)--- 解耦封装、简化代码、适者生存!

    UITableView这个iOS开发中永远绕不开的UIView,那么就不可避免的要在多个页面多种场景下反复摩擦UITableView,就算是刚跳进火坑不久的iOS Developer也知道实现UITa ...

  2. mac如何进入应用程序的内部文件夹?

    在程序点击右键,选择显示包内容,就可以看到了

  3. php获取当天的开始时间和结束时间戳

    $begin_time=date("Y-m-d H:i:s",mktime(0,0,0,date('m'),date('d'),date('Y')));$over_time=dat ...

  4. su与sudo命令的区别

    由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统. 如果用su 来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作. 特别是对于服 ...

  5. 【Android Developers Training】 81. 解析XML数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  6. 安装wamp的方法及过程

    地址栏输入:http://www.xiazaiba.com/html/27954.html下载wamp2.5版本,根据过程安装,其中会安装一些垃圾软件把不该勾选的去掉就可以.点击next,下一步下一步 ...

  7. AngularJS服务和路由

    colnplie     网页加载的出现一次 link     元素每次改变的时候 **$watch** 监听列表     $scope.$watch("name",functio ...

  8. 【操作教程】利用YCSB测试巨杉数据库性能

    一.前言 巨杉数据库(SequoiaDB)是国内第一款新一代文档型分布式数据库,巨杉数据库由巨杉软件完全自主研发,拥有完全自主知识产权,不基于任何其它的开源项目.SequoiaDB数据库是为分布式存储 ...

  9. Struts2拦截器记录系统操作日志

    前言 最近开发了一个项目,由于项目在整个开发过程中处于赶时间状态(每个项目都差不多如此)所以项目在收尾阶段发现缺少记录系统日志功能,以前系统都是直接写在每个模块的代码中,然后存入表单,在页面可以查看部 ...

  10. 详解Mysql自动备份与恢复

    通过 mysqldump命令,直接生成一个完整的 .sql 文件 Step 1: 创建一个批处理备份SQL c: cd C:Program Filesmysql5.6.24bin mysqldump ...