java Servlet Filter 拦截Ajax请求
/**
* 版权:Copyright 2016-2016 AudaqueTech. Co. Ltd. All Rights Reserved.
* 描述:
* 创建人:赵巍
* 创建时间:2016年11月28日
* 修改人:
* 修改时间:
* 修改内容:
*/
package com.thinkgem.jeesite.common.filter; import java.io.IOException; 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 javax.servlet.http.HttpSession; import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class CustomFilter implements Filter
{
private final Logger logger = LoggerFactory.getLogger(getClass());
private String failureUrl; @Override
public void init(FilterConfig filterConfig) throws ServletException {
//empty implement
} @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpSession session = httpRequest.getSession(); // String userid = (String)session.getAttribute("userid");
Subject subject = SecurityUtils.getSubject(); /* if(uri.contains("/user/login") || uri.contains("/user/regPage") ){
chain.doFilter(request, response);
}else{ */
if(subject.getPrincipals() == null){
String contextPath = httpRequest.getContextPath();
String redirect = contextPath ;
//ajax session 过期处理
//1:判断是否是ajax请求
if (httpRequest.getHeader("x-requested-with") != null
&& "XMLHttpRequest".equalsIgnoreCase(httpRequest.getHeader("x-requested-with"))) {
//向http头添加 状态 sessionstatus
httpResponse.setHeader("sessionstatus","timeout");
httpResponse.sendError(518, "session timeout.");
/*httpResponse.setStatus(403);*/
//向http头添加登录的url
httpResponse.addHeader("loginPath", failureUrl);
chain.doFilter(request, response);
logger.debug("ajax request");
return ;
}
httpResponse.sendRedirect(redirect);
return;
}else{
chain.doFilter(request, response);
}
/*}*/
} @Override
public void destroy() {
//empty implement
} public String getFailureUrl() {
return failureUrl;
} public void setFailureUrl(String failureUrl) {
this.failureUrl = failureUrl;
} }
$.ajax({
type: "get",
url: $(this).attr("data-href"),
success: function(data){
//
},
complete: function(xhr,status){
var sessionStatus = xhr.getResponseHeader('sessionstatus');
if(sessionStatus == 'timeout') {
top.location = "${ctx}";
return false;
}
}
});
}
java Servlet Filter 拦截Ajax请求的更多相关文章
- java Servlet Filter 拦截Ajax请求,统一处理session超时的问题
后台增加filter,注意不要把druid也屏蔽了 import java.io.IOException; import javax.servlet.Filter; import javax.serv ...
- filter 拦截ajax请求
1.filterpublic class SessonFilter implements Filter { private static Logger log = LoggerFactory.getL ...
- Mock拦截ajax请求
//mock拦截ajax请求 ,生成随机数据Mock.mock('./servlet/UserServlet?method=getUser',{ 'list|1-5':[{ 'username':'@ ...
- Servlet处理原生Ajax请求
萌新小白人生中的第一篇博客,难免会有差错,还望各位大佬多多包涵. 1. Ajax技术简介 Ajax(Asynchronous JavaScript and XML,异步JavaScript和 ...
- MOCK.JS 生成随机数据,拦截 Ajax 请求
mock.js 的用处 前后端分离 :让前端攻城师独立于后端进行开发. 增加单元测试的真实性 :通过随机数据,模拟各种场景. 开发无侵入 :不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响 ...
- session失效,使用ajax请求数据被拦截,此时正常的处理逻辑是跳到登录界面,而不是界面没有变化(java推断是否是ajax请求)
在登录过滤器中.推断请求是ajax请求还是超链接或者地址栏变化的请求 if (httpServletReq.getHeader("x-requested-with") != nul ...
- Java Servlet Filter(转)
做web开发的人对于Filter应该不会陌生,一直在很简单的使用,但是一直没有系统的总结一下,随着年纪的慢慢长大,喜欢总结一些事情,下面说说我对Filter的理解,官方给出的Filter的定义是在请求 ...
- Java Servlet Filter
做web开发的人对于Filter应该不会陌生,一直在很简单的使用,但是一直没有系统的总结一下,随着年纪的慢慢长大,喜欢总结一些事情,下面说说我对Filter的理解,官方给出的Filter的定义是在请求 ...
- Java过滤器应用-对Ajax请求做Session失效判断
过滤器常用来对Session过期做判断 Layout.js 1.为ajax请求添加标识 2.无论ajax请求成功与否,complete函数终会执行 // 全局Ajax设置, 用于session过期后的 ...
随机推荐
- 联合(union)类型有哪些使用场景
2013-08-22 - 18:17:50 by Gold_Lion 今天突然碰到“联合”这个数据类型了,平时用的不多,实在也想不出来它到底能帮我干嘛?于是google了一下,终于有一个是利用联合( ...
- Python 基礎 - 字符轉編碼操作
回顧字符編碼的前世今生 ASCII 只能儲英文或特殊字符,只占一個字節,一個字節8bit,不能儲中文,所以才出現Unicode Unicode 不管是中文或英文,都是占二個字節,一個字節8bit UT ...
- 重磅来袭,水木PC客户端全面改版,欢迎使用!
2016-11-04 下载 最新更新 1.优化帖子中回文内容的显示,采用相比正文较小的字体,以及置灰处理,突出正文. 2.可配置是否隐藏帖子中的IP和修改 ...
- Neo4j 查询已经创建的索引与约束
在Neo4j 2.0之后为cypher语法增加了一些类似于DDL的语法,能够自己创建索引,约束等等. 有如下的方法可以查询到当前图数据库的索引数量: neo4j-shell 使用:index –ind ...
- JDBC向数据库中插入数据
新建数据库,并插入相关数据. create database bbs; use bbs; create table article ( id int primary key auto_incremen ...
- Spring任务调度器之Task的使用
Spring Task提供两种方式进行配置,正如大家所想吧,还是一种是annotation(标注),而另外一种就是XML配置了.但其实这里我觉得比较尴尬,因为任务调度这样的需求,通常改动都是比较多的, ...
- linux下c语言实现搜索根目录下所有文件(转-wangxiangshang)
头文件: #include<dirent.h> #include<sys/types.h> opendir(): 函数原型: DIR * opendir(const char* ...
- epoll 反应堆
epoll反应堆模型 ================================ 下面代码实现的思想:epoll反应堆模型:( libevent 网络编程开源库 核心思想) . 普通多路IO转接 ...
- [转] "self = [super init]"的解释与潜藏bug
Objective-C的推荐init方法写法如下: - (id) init { if(self = [super init]) { //为子类增加属性进行初始化 } return self; } 这里 ...
- [THINKING IN JAVA]初始化和清理
4.5初始化和清理 5.1 构造器初始化 无参:如果一个类没有构造器,那么会有一个默认的无参构造器,并且只能通过无参构造器初始化对象: 带参:传入参数初始化成员变量或者其它初始化操作需要的参数,如果类 ...