`

shiro 整合dwz 解决登录跳转问题

 
阅读更多

 

在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;
	}
	
}

 

 

 大功告成。

 

 

 

0
0
分享到:
评论
2 楼 niweiwei 2014-05-15  
我的qq:1073746467,期待你的解答
1 楼 niweiwei 2014-05-14  
哥们, 你是怎么实现,我现在也遇到你同意的问题,我使用的是struts2,没有使用springmvc,你上述写的DWZLoginFilter 是要在哪里进配置

相关推荐

    shiro+dwz权限系统

    本文将深入探讨一个基于Apache Shiro和DWZ(Dynamic Web Zone)框架实现的权限系统,旨在提供一套完整的解决方案。 Apache Shiro是一款轻量级的安全框架,主要用于身份验证、授权和会话管理。它的设计简单易用,...

    spring mvc、 mybatis、 Shiro、 dwz实现的通用后台系统

    Spring MVC和MyBatis解决了业务逻辑和数据访问的问题,Shiro提供了安全防护,而DWZ则优化了用户体验。这样的架构设计不仅提高了开发效率,还保证了系统的稳定性和扩展性,对于构建企业级后台系统具有很高的参考价值...

    整合spring mvc+mybatis+Shiro+dwz实现的通用后台系统

    整合spring mvc+mybatis+Shiro+dwz实现的通用后台系统。完成了权限管理,角色管理,员工管理,部门管理等常用功能。无论私单公单都可快速上手。数据库使用mysql,根据实体类建库即可。

    struts2和shiro完美整合解决方案

    总结一下,Struts2和Shiro的整合提供了完整的Web应用安全解决方案,包括用户认证、授权、会话管理和权限控制。通过合理配置和使用,开发者可以构建出安全、易用的Java Web应用。提供的压缩包"shirodemo"应包含了一个...

    spring mvc,mybatis,Shiro,dwz实现的通用后台系统

    《基于Spring MVC、MyBatis、Shiro与DWZ的通用后台系统详解》 在现代企业级应用开发中,构建一套高效、安全且易于维护的后台管理系统至关重要。本篇文章将详细解析一个基于Spring MVC、MyBatis、Apache Shiro以及...

    通用后台系统,基于spring mvc,mybatis,Shiro,dwz 实现的

    总的来说,这个通用后台系统通过整合Spring MVC、MyBatis、Shiro和DWZ,实现了高效、安全且易于维护的管理平台。Spring MVC负责业务逻辑,MyBatis处理数据库操作,Shiro保障系统的安全性,而DWZ则优化了用户界面。...

    SpringBoot整合Shiro后实现免密登录

    SpringBoot整合Shiro后实现免密登录 1,说明一下步骤,需要在原来基础新增三个文件 2,新增CustomToken,重写UsernamePasswordToken免密登录调用方法和密码登录调用方法都在里面。 3,新增...

    基于JFinal+Shiro+DWZ,数据库采用MySQL的一个简单仓库管理系统

    《基于JFinal+Shiro+DWZ的简单仓库管理系统解析》 在当今信息化时代,企业对内部管理系统的依赖越来越重,而仓库管理系统作为其中的重要一环,帮助企业实现了库存的高效管理。本文将深入探讨一个使用JFinal、Shiro...

    Shiro + dwz + spring mvc + mybatis 实现的通用后台系统

    这是一个基于Java技术栈构建的通用后台管理系统,主要采用了Spring MVC、MyBatis、Apache Shiro以及DWZ UI框架。下面将详细介绍这些技术及其在系统中的作用。 **Spring MVC** Spring MVC是Spring框架的一个模块,...

    shiro整合ssm的全部jar包

    在Shiro中,Ehcache可以作为缓存管理器,存储用户的登录信息、权限等数据。配置Ehcache,我们需要在Shiro的配置文件中指定相应的缓存策略,确保缓存的有效性和过期策略。 接下来是`quartz-1.6.1`,Quartz是一个开源...

    spring mvc、mybatis、Shiro、dwz实现的通用后台系统

    《基于Spring MVC、MyBatis、Shiro与DWZ的通用后台系统详解》 在现代企业级应用开发中,选择合适的技术栈至关重要。本系统利用Spring MVC作为控制器层,MyBatis作为数据访问层,Apache Shiro作为安全框架,以及DWZ...

    【SSM】spring mvc+mybatis+Shiro+dwz实现的通用后台系统

    整合spring mvc+mybatis+Shiro+dwz实现的通用后台系统。完成了权限管理,角色管理,员工管理,部门管理等常用功能。无论私单公单都可快速上手。数据库使用mysql,根据实体类建库即可。

    spring shiro整合

    1. **认证**:Shiro提供了Subject接口,它是用户与系统交互的接口,通过Subject.login()方法进行登录,Shiro会通过Realm获取用户的凭证并进行匹配验证。 2. **授权**:权限控制是Shiro的重点,可以基于角色或者资源...

    shiro安全框架整合Mybatis

    本文使用Shiro整合Mybatis,利用Druid数据库连接池,实现用户认证和授权。 ———————————————— 版权声明:本文为CSDN博主「全村第二帅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处...

    shiro整合ssm框架

    本项目"shiro整合ssm框架"旨在将Shiro与SSM框架集成,提供一套完整的权限验证解决方案。 首先,我们要理解Shiro的核心组件: 1. **Subject**:Shiro的中心概念,代表当前用户的安全视角。 2. **Realm**:用于连接...

    shiro实现单点登录

    在Spring框架基础上整合Shiro、Spring Data Redis以及Spring Session Data Redis,可以构建一个高效、可靠的分布式SSO解决方案。 首先,理解Shiro的核心组件: 1. **Subject**:代表当前的用户,是Shiro框架的主要...

    Shiro整合Sping的源码

    Apache Shiro 和 Spring 的整合是企业级 Java 应用中常见的安全框架组合,它们结合了 Shiro 的身份验证、授权和会话管理功能与 Spring 的依赖注入和 AOP(面向切面编程)能力,实现了一个灵活且强大的安全解决方案。...

    ssm集成redis和shiro

    1. **会话管理**: 通过Shiro的SessionManager,配置为使用Redis作为session的存储,实现分布式会话,解决集群环境下的session共享问题。 2. **权限缓存**: 将Shiro的权限信息缓存在Redis中,提高权限验证效率,同时...

    权限管理(项目和源码):springboot与shiro整合

    Spring Boot 和 Apache Shiro 的整合为开发者提供了一种便捷的方式来实现这一目标。本项目旨在帮助开发者理解和实践如何将Shiro框架与Spring Boot相结合,用于权限控制和用户认证。下面将详细介绍这个实践项目中的...

    【SSM】spring mvc+mybatis+Shiro+dwz实现的通用后台系统.zip

    这是一个基于Java技术栈的通用后台管理系统,主要采用了Spring MVC、MyBatis、Shiro和DWZ框架进行构建。下面将详细介绍这些技术以及它们在系统中的作用。 **Spring MVC** Spring MVC是Spring框架的一个模块,主要...

Global site tag (gtag.js) - Google Analytics