shiro Ajax请求未登陆响应json串实现

package com.cc.sec; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.shiro.web.filter.authc.UserFilter; /** * 仅仅是重载了UserFilter类的redirectToLogin重定向到登陆界面模块 * * 这里考虑的情况是两种 * 1、当请求是普通的http请求,就是非Ajax请求时 直接使用UserFilter#redirectToLogin() * 2、当请求时Ajax请求时,这才是我想要重构(重载)的重点,响应的是一个json串 让客户端自己进入到登陆界面 */ public class Ajax2HttpUserFilter extends UserFilter { @Override protected void redirectToLogin(ServletRequest request,ServletResponse servletResponse) throws IOException { HttpServletResponse response = (HttpServletResponse) servletResponse; //判断请求是否是一个Ajax请求 Boolean isAjaxRe = WebUtils.isAjaxRequest((HttpServletRequest)request); if(!isAjaxRe){ //不是Ajax请求 则直接重定向到我的登陆地址 super.redirectToLogin(request,response); } else { if(redirectToLoginjson == null) initRedirectToLoginjson(); //否则响应一个json串 让前端自己跳转到登陆界面 ContextHelp.responseByJson(redirectToLoginjson,response); } } /** * 响应前端ajax请求,跳转到登陆界面的json串 */ private String redirectToLoginjson = null; /** * 同步的初始化redirectToLoginjson * 内部会再次判断redirectToLoginjson是否空 */ private synchronized void initRedirectToLoginjson() { if(redirectToLoginjson != null) return ; Map<String,Object> redirectToLogin = new HashMap<>(); redirectToLogin.put("toLogin",true); redirectToLogin.put("loginUrl",getLoginUrl()); redirectToLogin.put("status",302); redirectToLoginjson = JSONUtils.obj2json(redirectToLogin); } }

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...