shiro 自定义过滤器,拦截过期session的请求,并且以ajax形式返回
自定义过滤器:
public class CustomFormAuthenticationFilter extends FormAuthenticationFilter { @Override protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { if (isLoginRequest(request, response)) { if (isLoginSubmission(request, response)) { return executeLogin(request, response); } else { // 放行 allow them to see the login page ;) return true; } } else { HttpServletRequest httpRequest = WebUtils.toHttp(request); if (ShiroFilterUtils.isAjax(httpRequest)) { HttpServletResponse httpServletResponse = WebUtils.toHttp(response); httpServletResponse.sendError(ShiroFilterUtils.HTTP_STATUS_SESSION_EXPIRE); return false; } else { saveRequestAndRedirectToLogin(request, response); } return false; } } /** * 判断ajax请求 * @param request * @return */ boolean isAjax(HttpServletRequest request){ return (request.getHeader("X-Requested-With") != null && "XMLHttpRequest".equals( request.getHeader("X-Requested-With").toString()) ) ; } }
封装ajax
var Error = function () { return { // 初始化各个函数及对象 init: function () { }, // 显示或者记录错误 displayError: function(response, ajaxOptions, thrownError) { if (response.status == 404) {// 页面没有找到 pageContent.load($("#hdnContextPath").val() + "/page/404.action"); } else if (response.status == 401) {// session过期 SweetAlert.errorSessionExpire(); } else if (response.status == 507) {// 用户访问次数太频繁 SweetAlert.error("您的访问次数太频繁, 请过一会再试..."); } else {//其他错误 window.location = $("#hdnContextPath").val() + "/page/500.action"; } console.log(thrownError); } }; }(); jQuery(document).ready(function() { Error.init(); });
JS的引用处如下:
App.blockUI(); $.ajax({ url: $("#hdnContextPath").val() + "/feedback/queryFeedBackDetail.action", type: "POST", async: false, data: {"feedbackId": feedbackId, "userId": userId, "status": status}, success: function(data) { // 忽略 }, error: function (response, ajaxOptions, thrownError) { App.unblockUI(); Error.displayError(response, ajaxOptions, thrownError); } });
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
2016-06-23 权限框架 - shiro 授权demo