================================

©Copyright 蕃薯耀 2022-04-09

蕃薯耀的博客_CSDN博客

一、问题描述

当登录退出为Ajax请求时,使用Shiro的logout退出登录,会发生302重定向,导致不能正常退出。

二、解决方案

1、重写LogoutFilter 过滤器


import java.util.Locale;import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.shiro.session.SessionException;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.authc.LogoutFilter;
import org.apache.shiro.web.util.WebUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import com.lqy.shiro.bean.Result;
import com.lqy.shiro.utils.RequestUtils;/*** 重写shiro logout逻辑,避免是Ajax请求发生302重定向问题* @author islee**/
public class ShiroLogoutFilter extends LogoutFilter {private static final Logger log = LoggerFactory.getLogger(ShiroLogoutFilter.class);@Overrideprotected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse res = (HttpServletResponse) response;Subject subject = getSubject(request, response);// Check if POST only logout is enabledif (isPostOnlyLogout()) {// check if the current request's method is a POST, if not redirectif (!WebUtils.toHttp(request).getMethod().toUpperCase(Locale.ENGLISH).equals("POST")) {return onLogoutRequestNotAPost(request, response);}}String redirectUrl = getRedirectUrl(request, response, subject);try {subject.logout();} catch (SessionException ise) {log.debug("Encountered session exception during logout.  This can generally safely be ignored.", ise);}if(RequestUtils.isAjaxOrJsonRequest(req)) {RequestUtils.write(res, Result.ok("退出登录"));}else {issueRedirect(request, response, redirectUrl);}return false;}}

核心代码是:

if(RequestUtils.isAjaxOrJsonRequest(req)) {RequestUtils.write(res, Result.ok("退出登录"));}else {issueRedirect(request, response, redirectUrl);
}

判断是否为Ajax请求或者是Json请求,如果是,返回json字符串,否则默认进行登录跳转,即302重定向。

2、配置LogoutFilter 过滤器(ShiroLogoutFilter)

    @Beanpublic ShiroFilterFactoryBean shiroFilterFactoryBean () {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();//自定义过滤器LinkedHashMap<String, Filter> filtsMap=new LinkedHashMap<String, Filter>();filtsMap.put("logout",new ShiroLogoutFilter() );shiroFilterFactoryBean.setFilters(filtsMap);return shiroFilterFactoryBean;}

(时间宝贵,分享不易,捐赠回馈,^_^)

================================

©Copyright 蕃薯耀 2022-04-09

蕃薯耀的博客_CSDN博客

Shiro logout 302重定向,shiro 302解决方案相关推荐

  1. HTTP中的301重定向和302暂重定向重定

    302暂时重定向 302转向或者302重定向(302 redirect)指的是当浏览器要求一个网页的时候,主机所返回的状态码.302状态码的意义是暂时转向到另外一个网址. 另一个更常见的状态码是404 ...

  2. 错误码302重定向问题

    错误码302重定向问题 302有可能是自己的服务请求出去被自己的机子重定向了,可以从head里面的location可以看到重定向到哪的url

  3. uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案

    问题描述 小程序中不会自动保存和发送Cookie 使用插件(https://uniapp.dcloud.io/api/request/request)方法不能解决302重定向情况下获取Cookie 小 ...

  4. scrapy 解决Redirecting 301 302重定向问题

    在使用Scrapy框架中URl被重定向,总是遇到这类问题: DEBUG: Redirecting (301/302) to <GET https://XXXX refer https://XXX ...

  5. 浏览器 重定向次数限制_浏览器重定向(302)限制问题

    问题: 我今天收到反馈,说在IE8下退出存在问题,退出和跳转无法正常完成. 然后,我检查了问题的原因,发现退出接口使用跳转方法遍历白名单域名以退出所有域. 我在互联网上搜索了一下. 问题是什么?我了解 ...

  6. ajax302错误,Wordpress admin-ajax导致错误302重定向

    我已经定制了一个插件来做一些Ajax调用admin-ajax.php并且它工作的很好.我复制的代码转移到另一个网站,它不再适用于未登录谁的用户Wordpress admin-ajax导致错误302重定 ...

  7. nginx中301和302重定向之间的区别

    首先客户端浏览器的URL都会改变: 302重定向是暂时的重定向,搜索引擎会抓取新的内容而保留旧的地址.因为服务器返回302,所以搜索引擎会认为新的网址是暂时的: 301重定向是永久的重定向,搜索引擎会 ...

  8. 网站优化之尽量避免重定向(301/302)

    重定向会增加http请求的次数,会影响到整个网站的性能,但是必要的重定向又可以提高用户体验,所以我们需要在性能和用户体验之间去权衡,达到最好的目的:下面讲讲php实现301永久重定向和302临时重定向 ...

  9. HTTP 302重定向的一个具体例子

    网址:https://www.sslshopper.com/certificate-decoder.html 我们从IE浏览器里导出Certificate成.cer文件后, 用记事本打开,内容是这样的 ...

最新文章

  1. 谷歌力作:神经网络训练中的Batch依赖性很烦?那就消了它!
  2. 基于easyui开发Web版Activiti流程定制器详解(五)——Draw2d详解(一)
  3. GPT-3等三篇论文获NeurIPS2020最佳论文奖 | AI日报
  4. 将集合中的内容按时间排序
  5. WebZip 7.0.3.1030整个网站下载工具(特别版)
  6. @AI大神们 前方31万巨额奖金,别走好吗跑起来!!!
  7. .Net Core 全局配置读取管理方法 ConfigurationManager
  8. codeforces1451 E. Bitwise Queries(位运算妙用)
  9. 叙述计算机网络拓扑结构的定义,计算机网络拓扑结构的定义
  10. OC 实现的几个排序算法
  11. 专访 Swin Transformer 作者胡瀚:面向计算机视觉中的「开放问题」
  12. Android路由设置
  13. VirtualBox安装MAC时,只有光驱(Sierra Custom Installer)没有硬盘怎么办
  14. Ipad项目中用到的UIModalPresentationFormSheet,点击阴影部分dismiss 当前presented的controller
  15. 往返多伦多与温莎的交通全攻略!
  16. OpenGL4.0学习5.1--纹理(Targa图片贴图)
  17. [转]中国为什么培育不出自己的跨国公司(搜藏)
  18. speex库音频降噪(含代码)
  19. mabatis报错:Result type not match for select id=XXX
  20. Mac迅雷瘦身精简教程

热门文章

  1. SpringBoot项目的两种打包方式分析
  2. 浅谈计算机网络及交换机基础配置
  3. 用C语言打印简单图案(爱心\圆形\三角形等)
  4. Ansible批量管理Windows服务器,winrm配置
  5. GreenDao笔记
  6. 盘一盘 Python 系列 - Cufflinks (下)
  7. form的submit与onsubmit的用法与区别
  8. 解决win10下Photoshop2018CC手绘板画画变上下
  9. 绝地求生——PUBG吃鸡游戏模糊,画质很差
  10. 3.2 Execution Model