shiro Ajax请求未登陆响应json串实现
2016-09-18 11:00
246 查看
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);
}
} 阅读更多
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);
}
} 阅读更多
相关文章推荐
- Qt5.8《网络版够级游戏》编写日志之四:服务器端登陆响应功能实现(TCP多线程)
- android 访问c# webservice 实现登陆注册功能(android 上传json到服务器)
- struts2+jquery.ajax+json实现用户登陆,报错org.apache.struts2.json.JSONException:解决办法
- SpringMVC实现JSON数据的请求与响应
- MFC 软件登陆界面的实现(可以用来做启动画面,添加bmp图片,然后给图片加点击响应事件。)
- WebService中CXF实现响应数据在XML和JSON之间随意切换
- AngularJs HTTP响应拦截器实现登陆、权限校验
- 实现博客园登陆时响应回车事件
- 通过ajax异步向后端发送请求,响应请求向前端传送json格式数据的实现思路
- c#实现ajax通信:向后台发送JSON字符串,接收响应字符串,并转换为对象
- struts2 json jquery ajax实现用户登陆及业面跳转
- 自定义过滤器Filter进行JWT登陆令牌验证并设置响应头实现跨域时跨域失效
- spring boot security 实现登陆时ajax请求返回json,而不是直接页面跳转
- Android使用Gson解析JSON连接服务器实现客户端登陆功能
- extJs+json实现的一个登陆验证的简单例子
- Struts2+jQuery+Json 实现用户登陆
- struts2+jquery.ajax+json实现用户登陆,报错org.apache.struts2.json.JSONException:解决办法
- Android访问WCF服务(使用json实现参数传递)
- js中json对象不规律key的遍历实现和json对象length属性的调用
- 利用批处理命令实现多个QQ号码自动登陆