Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求
java 判断请求是不是ajax请求,Java判断是否为ajax请求
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
©Copyright 蕃薯耀 2017年8月10日
http://fanshuyao.iteye.com/
一、问题描述:
当访问一个需要登录的页面时,会有过滤器或者拦截器进行过滤拦截,如果用户没有登录,则跳转到登录页面。
当用户已经登录进入系统后,然后长时间没操作,等到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() { } }
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
©Copyright 蕃薯耀 2017年8月10日
http://fanshuyao.iteye.com/
相关推荐
过滤器是Servlet API提供的一种机制,它允许我们在请求被处理之前或之后进行拦截和处理。通过实现javax.servlet.Filter接口,我们可以创建自定义过滤器来执行诸如身份验证、数据转换、日志记录等任务。在描述中提到...
struts2在struts2.xml里配置拦截器可以过滤到指定的url的请求,但是对于ajax的请求确是过滤不了,比如说sesion超时或某些页面有权限控制的,通过ajax的请求时系统会报错最近在解决此类问题时碰上了找了不少资料,...
4. **FileFilter.java**:这个名字可能表示一个过滤器(Filter),在Java Web中,过滤器用于拦截请求,可以实现诸如权限检查、日志记录等功能。在这个场景下,FileFilter可能用于检查用户是否有权下载特定的文件,...
开发者可以通过过滤功能只显示Ajax请求,从而更方便地查看和分析。 此外,Chrome的"Chrome DevTools Protocol"也允许开发者通过编写自定义的Chrome扩展来获取Ajax请求记录。这个协议提供了一套JSON-over-WebSocket ...
为了解决这个问题,我们需要在过滤器或拦截器中区分普通页面请求和AJAX请求,并分别处理。对于AJAX请求,不进行页面重定向,而是通过HTTP响应返回特定的状态或信息,让前端根据这个信息做出相应的处理,如提示用户...
以Java为例,可以创建一个Servlet Filter: ```java @WebFilter(filterName = "AuthenticationFilter", urlPatterns = "/*") public class AuthenticationFilter implements Filter { @Override public void ...
- **灵活性受限**:相比于拦截器,过滤器的应用场景较为局限,通常只适用于Web环境下的请求处理流程控制。 #### 四、应用场景比较 1. **拦截器**: - **仅针对Action请求**:拦截器主要用于拦截Action请求,在...
Shiro 提供了 Filter(过滤器)机制,通过配置可以在 Web 应用的入口处拦截请求,进行权限验证。默认情况下,当用户无权访问某个资源时,Shiro 会重定向到一个预设的错误页面。但如果我们希望对 AJAX 请求做出特殊...
"过滤器"和"拦截器"是两种常用的解决策略,本篇将详细解释如何使用它们处理跨域CORS(Cross-Origin Resource Sharing)。 首先,让我们理解什么是CORS。CORS是一种W3C标准,它允许浏览器和服务器通过添加特定的HTTP...
- **Struts2拦截器**:在`web.xml`中配置`Struts2`过滤器,使所有URL都通过Struts2框架处理。这使得我们可以利用Struts2的特性来处理Ajax请求。 - **Struts2 JSON插件**:为了支持Ajax请求,我们需要引入`struts2-...
当一个Ajax请求被发送时,它会被Spring Security的过滤链所拦截,遵循相同的认证和授权流程。为了区分Ajax和非Ajax请求,我们可以使用`@Secured`或`@PreAuthorize`注解,或者自定义访问决策管理器。 3. **配置Ajax...
拦截器就像一个过滤器,位于Action调用之前和之后,可以对请求进行预处理和后处理。在Struts2的配置文件(如struts.xml)中,我们可以定义拦截器链,将多个拦截器串联起来,每个拦截器按照顺序执行。 1. **创建...
这个过滤器可能会检查请求头中的特定字段,或者查看请求参数,判断是否需要进行页面跳转。如果发现需要跳转,过滤器可以设置响应状态码或响应头,告知前端进行跳转。 为了在Ext JS应用中处理这种情况,你需要监听`...
Filter(过滤器)是Java Servlet技术的一部分,主要用于在一个请求到达Servlet之前或响应离开Servlet之后,进行预处理或后处理工作。Filter可以拦截请求,检查请求内容是否符合安全要求或业务规则,并且可以修改请求...
4. **Shiro 拦截器**:编写 Shiro 拦截器,处理 AJAX 请求,根据请求头信息进行身份验证和授权判断。 5. **错误处理**:当 AJAX 请求被 Shiro 拦截器拒绝时,返回相应的错误信息,前端可以根据这些信息展示错误提示...
接着,服务器端处理请求,返回的响应以Json格式封装数据,最后由Ajax回调函数解析Json并更新页面内容。 总的来说,Filter、Listener、Ajax和Json在Java Web开发中扮演着重要角色,它们协同工作,提升了Web应用的...
Struts2通过配置文件(struts.xml)管理请求映射,提供拦截器(Interceptor)机制,增强了异常处理和数据校验功能。 3. **Ajax(Asynchronous JavaScript and XML)**:在网页聊天中,Ajax技术主要用于实现页面无...
5. **Web.xml配置**:在某些情况下,可能需要在`web.xml`中配置过滤器或拦截器来处理特定的MIME类型。例如,如果你的项目使用了Jackson库进行JSON序列化,确保已经正确配置了Jackson的Servlet上下文初始化参数。 综...
`cors-filter-1.7.1.jar`提供了处理跨域请求的过滤器,而`java-property-utils-1.9.1.jar`可能用于读取和处理配置文件。 **三、配置CORS Filter** `web.xml`是Java Web应用的部署描述符,其中的拦截器配置文件...
在Java Web开发中,Servlet Filter是Java Servlet API提供的一种机制,用于在请求到达目标Servlet之前或之后进行拦截处理。Web12 Filter可以理解为一个特定版本或场景下的过滤器技术。过滤器的主要任务包括数据...