前端之家收集整理的这篇文章主要介绍了
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); } }
原文链接:https://www.f2er.com/ajax/161840.html