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);
}
}
分享到:
相关推荐
如果判断是 AJAX 请求,我们可以通过 `response.getWriter().write(jsonErrorMessage)` 将错误信息以 JSON 格式写入响应,其中 `jsonErrorMessage` 是一个包含错误信息的 JSON 字符串。对于非 AJAX 请求,我们可以像...
4. **Shiro 拦截器**:编写 Shiro 拦截器,处理 AJAX 请求,根据请求头信息进行身份验证和授权判断。 5. **错误处理**:当 AJAX 请求被 Shiro 拦截器拒绝时,返回相应的错误信息,前端可以根据这些信息展示错误提示...
在这个方法里,我们需要检查请求头部的`X-Requested-With`字段,如果是Ajax请求,则返回一个JSON响应表示权限不足;如果不是,则按照原有方式重定向到无权限页面。 #### 三、区分Ajax实现 ##### 3.1 定义一个过滤...
3. **JSON响应**:返回统一的JSON格式数据,便于前端处理。 4. **幂等性**:对于GET和DELETE请求,确保同一请求多次执行结果相同。 **三、前后端分离** 1. **接口通信**:前后端通过API进行通信,前端通过Ajax...
3. **前后端分离**:Vue.js作为前端,通过Ajax请求与SpringBoot后端进行数据交互,实现CRUD操作,如添加、删除、修改和查询教务信息。 4. **API设计**:SpringBoot提供RESTful API接口,允许Vue.js前端以JSON格式...
5. **前后端交互**:涉及JSON格式数据的处理,前端通过Ajax发送请求,后端使用Controller处理请求并返回响应。 6. **模板引擎与视图解析**:如Thymeleaf的使用,将后台数据渲染到前端页面。 7. **单元测试**:了解...
8. **JSON格式**:在AJAX请求和响应中,JSON(JavaScript Object Notation)格式常用于数据交换,因其轻量级和易于解析的特性而广受欢迎。 9. **版本控制**:开发过程中,Git可能被用作版本控制系统,便于团队协作...
这是一个基于现代技术栈的前后端分离权限管理系统的实现,整合了SpringBoot、Shiro、JWT(JSON Web Token)以及前端的Vue.js和Ant Design。这个系统旨在提供安全、高效的用户认证和授权机制,同时实现了优雅的用户...
- **异步请求处理**:Shiro可以很好地处理AJAX请求,通过设置过滤器链,确保对异步请求的安全拦截。 - **JSON响应**:配置Shiro返回JSON格式的错误信息,方便前端处理错误状态。 - **跨域资源共享(CORS)**:若...
前端则采用了Bootstrap框架来美化用户界面,并利用Ajax与JSON技术实现数据的异步加载与交互。 ### 技术栈介绍 #### Spring Framework Spring Framework 是一个开源的应用框架,它提供了一整套企业级应用解决方案。...
Web应用程序基于Spring框架开发,页面展示和控制包括动态同步请求、Ajax异步请求(可返回HTML串、JSON格式或简单字符串)以及模板生成的纯静态页面。前端框架和第三方技术包括jQuery、jQuery UI、jQuery Zoom和...
在SpringBoot中,我们可以配置RESTful API接口,这些接口负责接收前端的AJAX请求,处理业务逻辑,然后返回JSON格式的数据。这种方式使前后端分离更加明确,有利于代码的组织和维护。此外,Spring Security或者Spring...
5. **响应前端**:后端返回登录结果,前端根据返回的JSON数据向用户显示消息,成功时跳转至主页。 接下来,注册功能的实现类似,但增加了几个额外的验证环节: 1. **唯一性验证**:在注册表单中,除了基本的用户名...
Struts2可以结合Spring Security或Apache Shiro等安全框架实现用户认证和授权。例如,通过拦截器限制未登录用户访问某些Action,或者根据用户角色控制访问权限。 ### 6. 分页与搜索 为了提高用户体验,BBS系统通常...
源码可能涉及到使用jQuery或XMLHttpRequest进行Ajax请求,以及JSON数据的序列化与反序列化。 6. **Spring框架**: Spring不仅是MVC框架,还提供了依赖注入、AOP(面向切面编程)等功能。源码中会展示如何配置...
在酒店管理系统中,前端通过Ajax技术向后端发送HTTP请求,获取或提交JSON格式的数据,实现无刷新页面更新,提高了用户体验。 项目部署时,我们通常会将打包后的应用文件(如"HotelManageSystem.war"或...
Ajax技术可以实现页面的部分刷新,提高交互性。另外,JSON作为数据交换格式,用于在前后端之间传输数据。 此外,为了提升用户体验,搜索引擎优化(SEO)和性能优化也是必不可少的。这包括合理的URL设计、页面加载...
4. **JSON与Ajax**:为了实现实时的个性化更新,系统可能利用JSON(JavaScript Object Notation)进行数据交换,结合Ajax(Asynchronous JavaScript and XML)技术,实现无刷新的页面更新。 5. **Spring框架**:...