Shiro logout 302重定向,shiro 302解决方案
================================
©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解决方案相关推荐
- HTTP中的301重定向和302暂重定向重定
302暂时重定向 302转向或者302重定向(302 redirect)指的是当浏览器要求一个网页的时候,主机所返回的状态码.302状态码的意义是暂时转向到另外一个网址. 另一个更常见的状态码是404 ...
- 错误码302重定向问题
错误码302重定向问题 302有可能是自己的服务请求出去被自己的机子重定向了,可以从head里面的location可以看到重定向到哪的url
- uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案
问题描述 小程序中不会自动保存和发送Cookie 使用插件(https://uniapp.dcloud.io/api/request/request)方法不能解决302重定向情况下获取Cookie 小 ...
- scrapy 解决Redirecting 301 302重定向问题
在使用Scrapy框架中URl被重定向,总是遇到这类问题: DEBUG: Redirecting (301/302) to <GET https://XXXX refer https://XXX ...
- 浏览器 重定向次数限制_浏览器重定向(302)限制问题
问题: 我今天收到反馈,说在IE8下退出存在问题,退出和跳转无法正常完成. 然后,我检查了问题的原因,发现退出接口使用跳转方法遍历白名单域名以退出所有域. 我在互联网上搜索了一下. 问题是什么?我了解 ...
- ajax302错误,Wordpress admin-ajax导致错误302重定向
我已经定制了一个插件来做一些Ajax调用admin-ajax.php并且它工作的很好.我复制的代码转移到另一个网站,它不再适用于未登录谁的用户Wordpress admin-ajax导致错误302重定 ...
- nginx中301和302重定向之间的区别
首先客户端浏览器的URL都会改变: 302重定向是暂时的重定向,搜索引擎会抓取新的内容而保留旧的地址.因为服务器返回302,所以搜索引擎会认为新的网址是暂时的: 301重定向是永久的重定向,搜索引擎会 ...
- 网站优化之尽量避免重定向(301/302)
重定向会增加http请求的次数,会影响到整个网站的性能,但是必要的重定向又可以提高用户体验,所以我们需要在性能和用户体验之间去权衡,达到最好的目的:下面讲讲php实现301永久重定向和302临时重定向 ...
- HTTP 302重定向的一个具体例子
网址:https://www.sslshopper.com/certificate-decoder.html 我们从IE浏览器里导出Certificate成.cer文件后, 用记事本打开,内容是这样的 ...
最新文章
- 谷歌力作:神经网络训练中的Batch依赖性很烦?那就消了它!
- 基于easyui开发Web版Activiti流程定制器详解(五)——Draw2d详解(一)
- GPT-3等三篇论文获NeurIPS2020最佳论文奖 | AI日报
- 将集合中的内容按时间排序
- WebZip 7.0.3.1030整个网站下载工具(特别版)
- @AI大神们 前方31万巨额奖金,别走好吗跑起来!!!
- .Net Core 全局配置读取管理方法 ConfigurationManager
- codeforces1451 E. Bitwise Queries(位运算妙用)
- 叙述计算机网络拓扑结构的定义,计算机网络拓扑结构的定义
- OC 实现的几个排序算法
- 专访 Swin Transformer 作者胡瀚:面向计算机视觉中的「开放问题」
- Android路由设置
- VirtualBox安装MAC时,只有光驱(Sierra Custom Installer)没有硬盘怎么办
- Ipad项目中用到的UIModalPresentationFormSheet,点击阴影部分dismiss 当前presented的controller
- 往返多伦多与温莎的交通全攻略!
- OpenGL4.0学习5.1--纹理(Targa图片贴图)
- [转]中国为什么培育不出自己的跨国公司(搜藏)
- speex库音频降噪(含代码)
- mabatis报错:Result type not match for select id=XXX
- Mac迅雷瘦身精简教程