ajax访问jeesite session超时时返回 json
来源:互联网 发布:淘宝网汽车座套 编辑:程序博客网 时间:2024/06/05 14:51
项目中 用jeesite 做服务端, ajax请求业务时,如果session超时 一直返回 web登录页面, 需要重写 shiro拦截器的onAccessDenied方法,判断到如果 Principal为空并且是ajax请求 直接ajax返回,
/** * Copyright © 2012-2016 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved. */package com.thinkgem.jeesite.modules.sys.security;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.authc.AuthenticationException;import org.apache.shiro.authc.AuthenticationToken;import org.apache.shiro.authc.IncorrectCredentialsException;import org.apache.shiro.authc.UnknownAccountException;import org.apache.shiro.subject.Subject;import org.apache.shiro.web.util.WebUtils;import org.springframework.stereotype.Service;import com.thinkgem.jeesite.common.mapper.JsonMapper;import com.thinkgem.jeesite.common.utils.StringUtils;/** * 表单验证(包含验证码)过滤类 * @author ThinkGem * @version 2014-5-19 */@Servicepublic class FormAuthenticationFilter extends org.apache.shiro.web.filter.authc.FormAuthenticationFilter {public static final String DEFAULT_CAPTCHA_PARAM = "validateCode";public static final String DEFAULT_MOBILE_PARAM = "mobileLogin";public static final String DEFAULT_MESSAGE_PARAM = "message";private String captchaParam = DEFAULT_CAPTCHA_PARAM;private String mobileLoginParam = DEFAULT_MOBILE_PARAM;private String messageParam = DEFAULT_MESSAGE_PARAM;boolean isAjax(HttpServletRequest request){ return (request.getHeader("X-Requested-With") != null && "XMLHttpRequest".equals( request.getHeader("X-Requested-With").toString()) ) ; }/** * 重写该方法 session超时 ajax请求 返回json */@Overrideprotected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {// TODO Auto-generated method stubHttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; Subject subject = getSubject(request, response); if (subject.getPrincipal() == null && isAjax(httpRequest)) { httpResponse.reset(); httpResponse.setContentType("application/json"); httpResponse.setCharacterEncoding("utf-8"); Map<String, String> map = new HashMap<String, String>(); map.put("code", "-1"); map.put("msg", "session timeOut"); httpResponse.getWriter().print(JsonMapper.toJsonString(map)); return false; }return super.onAccessDenied(request, response);}protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) {String username = getUsername(request);String password = getPassword(request);if (password==null){password = "";}boolean rememberMe = isRememberMe(request);String host = StringUtils.getRemoteAddr((HttpServletRequest)request);String captcha = getCaptcha(request);boolean mobile = isMobileLogin(request);return new UsernamePasswordToken(username, password.toCharArray(), rememberMe, host, captcha, mobile);}/** * 获取登录用户名 */protected String getUsername(ServletRequest request, ServletResponse response) {String username = super.getUsername(request);if (StringUtils.isBlank(username)){username = StringUtils.toString(request.getAttribute(getUsernameParam()), StringUtils.EMPTY);}return username;}/** * 获取登录密码 */@Overrideprotected String getPassword(ServletRequest request) {String password = super.getPassword(request);if (StringUtils.isBlank(password)){password = StringUtils.toString(request.getAttribute(getPasswordParam()), StringUtils.EMPTY);}return password;}/** * 获取记住我 */@Overrideprotected boolean isRememberMe(ServletRequest request) {String isRememberMe = WebUtils.getCleanParam(request, getRememberMeParam());if (StringUtils.isBlank(isRememberMe)){isRememberMe = StringUtils.toString(request.getAttribute(getRememberMeParam()), StringUtils.EMPTY);}return StringUtils.toBoolean(isRememberMe);}public String getCaptchaParam() {return captchaParam;}protected String getCaptcha(ServletRequest request) {return WebUtils.getCleanParam(request, getCaptchaParam());}public String getMobileLoginParam() {return mobileLoginParam;}protected boolean isMobileLogin(ServletRequest request) { return WebUtils.isTrue(request, getMobileLoginParam()); }public String getMessageParam() {return messageParam;}/** * 登录成功之后跳转URL */public String getSuccessUrl() {return super.getSuccessUrl();}@Overrideprotected void issueSuccessRedirect(ServletRequest request,ServletResponse response) throws Exception {//Principal p = UserUtils.getPrincipal();//if (p != null && !p.isMobileLogin()){ WebUtils.issueRedirect(request, response, getSuccessUrl(), null, true);//}else{//super.issueSuccessRedirect(request, response);//}}/** * 登录失败调用事件 */@Overrideprotected boolean onLoginFailure(AuthenticationToken token,AuthenticationException e, ServletRequest request, ServletResponse response) {String className = e.getClass().getName(), message = "";if (IncorrectCredentialsException.class.getName().equals(className)|| UnknownAccountException.class.getName().equals(className)){message = "用户或密码错误, 请重试.";}else if (e.getMessage() != null && StringUtils.startsWith(e.getMessage(), "msg:")){message = StringUtils.replace(e.getMessage(), "msg:", "");}else{message = "系统出现点问题,请稍后再试!";e.printStackTrace(); // 输出到控制台} request.setAttribute(getFailureKeyAttribute(), className); request.setAttribute(getMessageParam(), message); return true;}}
阅读全文
0 0
- ajax访问jeesite session超时时返回 json
- session过期 ajax访问不能返回登录页面问题
- ajax 返回json
- AJax 返回 json
- ajax-返回json
- ajax返回json数据
- ajax json 请求返回
- Ajax返回JSON数据
- Ajax 返回 json
- ajax返回json数据
- ajax json数据返回
- ajax返回json串
- 客户端使用Ajax访问struts2 , struts2如何返回一个json数据!json-lib与flexjson
- ASP.NET设置session超时时长的4中方法
- Session 时时监控例子
- Session 时时监控例子
- 判断SQL数据库是否通畅,加快返回速度,取消延迟或超时时才反馈回来!
- shiro修改没有登录或者session失效,根据ajax返回json
- 配置免安装版jdk1.8的环境变量
- 乱谈Qt事件循环嵌套
- 多线程 ThreadGroup activeCount没有作用的情况下,多线程也可以自己写,ThreadGroup不一定好使
- 为什么时间越紧,越容易拖延?--致拖延症患者
- Java设计模式--代理模式【Proxy Pattern】
- ajax访问jeesite session超时时返回 json
- 再谈java乱码:GBK和UTF-8互转尾部乱码问题分析
- mysql视图的作用(详细)
- 【Java】String经MD5加密后的32位输出
- Integer类型与int的==比较
- 关于获取图片在网页加载后的高度
- javascript – 为什么null是一个对象,null和undefined之间有什么区别?(最通俗的解释,推荐)
- java mail发送邮件
- 架构师的能力模型