在dwz界面操作会话超时时,有两种处理方法。一种是跳到登录页面,另一种是弹出登录对话框。
如果使用了shiro框架,由于会记录最后访问记录,重新登录后会跳转到最后访问页面。
对于第一种处理方法,在登录界面登录后会重定向到最后访问页面,这样就会脱离了dwz的navtab控制。
所以只能采取第二种方法,即弹出登录对话框。 重新登录后同样面临重定向问题。因为这时对话框要求返回dwz特有的响应数据。没办法,只好自己hack一下了。
ok,随便扫一眼shiro的源码,找到了一个切入点。不难发现,shiro处理登录的是FormAuthenticationFilter这个filter,就从这个地方动手术。要看懂下面手术内容,需要明白dwz界面内发出的请求都是一个ajax请求。
public class DWZLoginFilter extends FormAuthenticationFilter { @Override protected void issueSuccessRedirect(ServletRequest request, ServletResponse response) throws Exception { if(isAjaxRequest(request)){ PrintWriter writer = getWriterFromResponse(response); DWZJsonReply reply = new DWZJsonReply(); reply.setMessage("Login successful!"); reply.setForwardUrl(getForwardUrl(request)); writer.print(JsonService.getJsonMapper().toJson(reply)); } else WebUtils.redirectToSavedRequest(request, response, getSuccessUrl()); } public String getForwardUrl(ServletRequest request){ SavedRequest savedRequest = WebUtils.getAndClearSavedRequest(request); if(savedRequest != null && savedRequest.getMethod().equalsIgnoreCase(AccessControlFilter.GET_METHOD)){ return savedRequest.getRequestUrl(); } return getSuccessUrl(); } @Override protected boolean onLoginFailure(AuthenticationToken token, AuthenticationException e, ServletRequest request, ServletResponse response) { setFailureAttribute(request, e); if(isAjaxRequest(request)){ PrintWriter writer = getWriterFromResponse(response); DWZJsonReply reply = new DWZJsonReply(); reply.setStatusCode(DWZJsonReply.ERROR); reply.setMessage("Login fail.Invalid username or password."); writer.print(JsonService.getJsonMapper().toJson(reply)); return false; } // login failed, let request continue back to the login page: return true; } public PrintWriter getWriterFromResponse(ServletResponse res){ HttpServletResponse response = (HttpServletResponse)res; response.setHeader("Content-type", "text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); try { return response.getWriter(); } catch (IOException e) { e.printStackTrace(); throw Exceptions.unchecked(e); } } public boolean isAjaxRequest(ServletRequest request) { return ((HttpServletRequest) request).getHeader("x-requested-with") != null; } }
大功告成。
相关推荐
本文将深入探讨一个基于Apache Shiro和DWZ(Dynamic Web Zone)框架实现的权限系统,旨在提供一套完整的解决方案。 Apache Shiro是一款轻量级的安全框架,主要用于身份验证、授权和会话管理。它的设计简单易用,...
Spring MVC和MyBatis解决了业务逻辑和数据访问的问题,Shiro提供了安全防护,而DWZ则优化了用户体验。这样的架构设计不仅提高了开发效率,还保证了系统的稳定性和扩展性,对于构建企业级后台系统具有很高的参考价值...
整合spring mvc+mybatis+Shiro+dwz实现的通用后台系统。完成了权限管理,角色管理,员工管理,部门管理等常用功能。无论私单公单都可快速上手。数据库使用mysql,根据实体类建库即可。
总结一下,Struts2和Shiro的整合提供了完整的Web应用安全解决方案,包括用户认证、授权、会话管理和权限控制。通过合理配置和使用,开发者可以构建出安全、易用的Java Web应用。提供的压缩包"shirodemo"应包含了一个...
《基于Spring MVC、MyBatis、Shiro与DWZ的通用后台系统详解》 在现代企业级应用开发中,构建一套高效、安全且易于维护的后台管理系统至关重要。本篇文章将详细解析一个基于Spring MVC、MyBatis、Apache Shiro以及...
总的来说,这个通用后台系统通过整合Spring MVC、MyBatis、Shiro和DWZ,实现了高效、安全且易于维护的管理平台。Spring MVC负责业务逻辑,MyBatis处理数据库操作,Shiro保障系统的安全性,而DWZ则优化了用户界面。...
SpringBoot整合Shiro后实现免密登录 1,说明一下步骤,需要在原来基础新增三个文件 2,新增CustomToken,重写UsernamePasswordToken免密登录调用方法和密码登录调用方法都在里面。 3,新增...
《基于JFinal+Shiro+DWZ的简单仓库管理系统解析》 在当今信息化时代,企业对内部管理系统的依赖越来越重,而仓库管理系统作为其中的重要一环,帮助企业实现了库存的高效管理。本文将深入探讨一个使用JFinal、Shiro...
这是一个基于Java技术栈构建的通用后台管理系统,主要采用了Spring MVC、MyBatis、Apache Shiro以及DWZ UI框架。下面将详细介绍这些技术及其在系统中的作用。 **Spring MVC** Spring MVC是Spring框架的一个模块,...
在Shiro中,Ehcache可以作为缓存管理器,存储用户的登录信息、权限等数据。配置Ehcache,我们需要在Shiro的配置文件中指定相应的缓存策略,确保缓存的有效性和过期策略。 接下来是`quartz-1.6.1`,Quartz是一个开源...
《基于Spring MVC、MyBatis、Shiro与DWZ的通用后台系统详解》 在现代企业级应用开发中,选择合适的技术栈至关重要。本系统利用Spring MVC作为控制器层,MyBatis作为数据访问层,Apache Shiro作为安全框架,以及DWZ...
整合spring mvc+mybatis+Shiro+dwz实现的通用后台系统。完成了权限管理,角色管理,员工管理,部门管理等常用功能。无论私单公单都可快速上手。数据库使用mysql,根据实体类建库即可。
1. **认证**:Shiro提供了Subject接口,它是用户与系统交互的接口,通过Subject.login()方法进行登录,Shiro会通过Realm获取用户的凭证并进行匹配验证。 2. **授权**:权限控制是Shiro的重点,可以基于角色或者资源...
本文使用Shiro整合Mybatis,利用Druid数据库连接池,实现用户认证和授权。 ———————————————— 版权声明:本文为CSDN博主「全村第二帅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处...
本项目"shiro整合ssm框架"旨在将Shiro与SSM框架集成,提供一套完整的权限验证解决方案。 首先,我们要理解Shiro的核心组件: 1. **Subject**:Shiro的中心概念,代表当前用户的安全视角。 2. **Realm**:用于连接...
在Spring框架基础上整合Shiro、Spring Data Redis以及Spring Session Data Redis,可以构建一个高效、可靠的分布式SSO解决方案。 首先,理解Shiro的核心组件: 1. **Subject**:代表当前的用户,是Shiro框架的主要...
Apache Shiro 和 Spring 的整合是企业级 Java 应用中常见的安全框架组合,它们结合了 Shiro 的身份验证、授权和会话管理功能与 Spring 的依赖注入和 AOP(面向切面编程)能力,实现了一个灵活且强大的安全解决方案。...
1. **会话管理**: 通过Shiro的SessionManager,配置为使用Redis作为session的存储,实现分布式会话,解决集群环境下的session共享问题。 2. **权限缓存**: 将Shiro的权限信息缓存在Redis中,提高权限验证效率,同时...
Spring Boot 和 Apache Shiro 的整合为开发者提供了一种便捷的方式来实现这一目标。本项目旨在帮助开发者理解和实践如何将Shiro框架与Spring Boot相结合,用于权限控制和用户认证。下面将详细介绍这个实践项目中的...
这是一个基于Java技术栈的通用后台管理系统,主要采用了Spring MVC、MyBatis、Shiro和DWZ框架进行构建。下面将详细介绍这些技术以及它们在系统中的作用。 **Spring MVC** Spring MVC是Spring框架的一个模块,主要...