`

shiro Ajax请求未登陆响应json串实现

 
阅读更多
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);
}
}
分享到:
评论

相关推荐

    自定义shiro实现识别ajax请求的拒绝返回json,还是普通返回页面

    如果判断是 AJAX 请求,我们可以通过 `response.getWriter().write(jsonErrorMessage)` 将错误信息以 JSON 格式写入响应,其中 `jsonErrorMessage` 是一个包含错误信息的 JSON 字符串。对于非 AJAX 请求,我们可以像...

    Shiro和AJAX完美整合

    4. **Shiro 拦截器**:编写 Shiro 拦截器,处理 AJAX 请求,根据请求头信息进行身份验证和授权判断。 5. **错误处理**:当 AJAX 请求被 Shiro 拦截器拒绝时,返回相应的错误信息,前端可以根据这些信息展示错误提示...

    Shiro权限控制-区分Ajax请求

    在这个方法里,我们需要检查请求头部的`X-Requested-With`字段,如果是Ajax请求,则返回一个JSON响应表示权限不足;如果不是,则按照原有方式重定向到无权限页面。 #### 三、区分Ajax实现 ##### 3.1 定义一个过滤...

    SpringBoot整合Shiro

    3. **JSON响应**:返回统一的JSON格式数据,便于前端处理。 4. **幂等性**:对于GET和DELETE请求,确保同一请求多次执行结果相同。 **三、前后端分离** 1. **接口通信**:前后端通过API进行通信,前端通过Ajax...

    springboot+shiro+vue实现的简易教务系统.zip

    3. **前后端分离**:Vue.js作为前端,通过Ajax请求与SpringBoot后端进行数据交互,实现CRUD操作,如添加、删除、修改和查询教务信息。 4. **API设计**:SpringBoot提供RESTful API接口,允许Vue.js前端以JSON格式...

    SpringBoot+Shiro权限管理系统脚手架.zip

    5. **前后端交互**:涉及JSON格式数据的处理,前端通过Ajax发送请求,后端使用Controller处理请求并返回响应。 6. **模板引擎与视图解析**:如Thymeleaf的使用,将后台数据渲染到前端页面。 7. **单元测试**:了解...

    [信息办公]AJAX版CD管理系统_ajaxcd.zip

    8. **JSON格式**:在AJAX请求和响应中,JSON(JavaScript Object Notation)格式常用于数据交换,因其轻量级和易于解析的特性而广受欢迎。 9. **版本控制**:开发过程中,Git可能被用作版本控制系统,便于团队协作...

    SpringBoot,Shiro,JWT,Vue &amp; Ant Design 前后端分离权限管理系统,预览地址.zip

    这是一个基于现代技术栈的前后端分离权限管理系统的实现,整合了SpringBoot、Shiro、JWT(JSON Web Token)以及前端的Vue.js和Ant Design。这个系统旨在提供安全、高效的用户认证和授权机制,同时实现了优雅的用户...

    spring boot集成shrio

    - **异步请求处理**:Shiro可以很好地处理AJAX请求,通过设置过滤器链,确保对异步请求的安全拦截。 - **JSON响应**:配置Shiro返回JSON格式的错误信息,方便前端处理错误状态。 - **跨域资源共享(CORS)**:若...

    spring+spring-mvc+mybatis+bootstrap+ajax详细项目案例

    前端则采用了Bootstrap框架来美化用户界面,并利用Ajax与JSON技术实现数据的异步加载与交互。 ### 技术栈介绍 #### Spring Framework Spring Framework 是一个开源的应用框架,它提供了一整套企业级应用解决方案。...

    JAVA技术架构及开发规范文档.docx

    Web应用程序基于Spring框架开发,页面展示和控制包括动态同步请求、Ajax异步请求(可返回HTML串、JSON格式或简单字符串)以及模板生成的纯静态页面。前端框架和第三方技术包括jQuery、jQuery UI、jQuery Zoom和...

    springboot页面局部刷新后台管理系统

    在SpringBoot中,我们可以配置RESTful API接口,这些接口负责接收前端的AJAX请求,处理业务逻辑,然后返回JSON格式的数据。这种方式使前后端分离更加明确,有利于代码的组织和维护。此外,Spring Security或者Spring...

    Spring shiro + bootstrap + jquery.validate 实现登录、注册功能

    5. **响应前端**:后端返回登录结果,前端根据返回的JSON数据向用户显示消息,成功时跳转至主页。 接下来,注册功能的实现类似,但增加了几个额外的验证环节: 1. **唯一性验证**:在注册表单中,除了基本的用户名...

    基于Struts2的BBS项目

    Struts2可以结合Spring Security或Apache Shiro等安全框架实现用户认证和授权。例如,通过拦截器限制未登录用户访问某些Action,或者根据用户角色控制访问权限。 ### 6. 分页与搜索 为了提高用户体验,BBS系统通常...

    java web开发实战经典源码(1-8)

    源码可能涉及到使用jQuery或XMLHttpRequest进行Ajax请求,以及JSON数据的序列化与反序列化。 6. **Spring框架**: Spring不仅是MVC框架,还提供了依赖注入、AOP(面向切面编程)等功能。源码中会展示如何配置...

    酒店管理.zip

    在酒店管理系统中,前端通过Ajax技术向后端发送HTTP请求,获取或提交JSON格式的数据,实现无刷新页面更新,提高了用户体验。 项目部署时,我们通常会将打包后的应用文件(如"HotelManageSystem.war"或...

    基于java的美食网站的设计与实现2.zip

    Ajax技术可以实现页面的部分刷新,提高交互性。另外,JSON作为数据交换格式,用于在前后端之间传输数据。 此外,为了提升用户体验,搜索引擎优化(SEO)和性能优化也是必不可少的。这包括合理的URL设计、页面加载...

    基于JAVA技术的个性化定制系统

    4. **JSON与Ajax**:为了实现实时的个性化更新,系统可能利用JSON(JavaScript Object Notation)进行数据交换,结合Ajax(Asynchronous JavaScript and XML)技术,实现无刷新的页面更新。 5. **Spring框架**:...

Global site tag (gtag.js) - Google Analytics