`
king_tt
  • 浏览: 2248736 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

struts2拦截器实现session会话过滤

阅读更多

笔记之用...

 

首先定义一个拦截器

 

package com.test.intercepter;

import java.io.PrintWriter;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

/****************
 * session会话超时处理
 * @author shen
 *
 */
public class SessionIntercepter extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("interceptor拦截......");
		ActionContext ctx=ActionContext.getContext();
		Map session=ctx.getSession();
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		String uri = request.getRequestURI();
		String prefix = request.getContextPath(); // 得到 项目上下文路径
		uri = uri.substring(prefix.length()); // 去除 项目上下文路径
		String queryString = request.getQueryString();
		String requestUri = uri;
		if (queryString!=null) {
			requestUri = requestUri + "?" + queryString;
		}
		if (null!=requestUri&&requestUri.length()>1&&requestUri.startsWith("/")) {
			requestUri = removePrex(requestUri);//移除前面的"//"
		}
		System.out.println("url:"+requestUri);//拦截的都是action
		if(requestUri.indexOf("type=ajax")!=-1){
			return invocation.invoke();
		}
		if("userAction!login.action".equals(requestUri)
				||"userAction!login.action?cookie=yes".equals(requestUri)
			){
			return invocation.invoke();//如果是登录、注销,则放行,不用检查session
		}else{//其它的url则检查session
			String user=(String)session.get("username");
			if(user!=null){
				return invocation.invoke();
			}
			
			response.setContentType("text/html;charset=UTF-8");
            response.setCharacterEncoding("UTF-8");//防止弹出的信息出现乱码
			PrintWriter out = response.getWriter();
	        out.println("<html>");  
	        out.println("<script type=\"text/javascript\">");  
	        out.println("alert('未登录或会话已过期,请重新登录!')");
	        out.println("window.open ('"+prefix+"/login.jsp','_top')");  
	        out.println("</script>");  
	        out.println("</html>");
			return null;
		}
	}

	public String removePrex(String s){
		String patternStr = "([a-zA-Z]+)";
		Pattern pattern = Pattern.compile(patternStr);
	    Matcher matcher = pattern.matcher(s);
	    String replaceStr = null;
	    if (matcher.find()) {
	    	replaceStr = matcher.group();
		}
		int i = s.indexOf(replaceStr)-1;
		if (s.length()>i) {
			s = s.substring(i+1, s.length());
		}
		return s;
	}
}



然后struts.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>

	<constant name="struts.ui.theme" value="simple" />
	<constant name="struts.ui.templateDir" value="template" />
	<constant name="struts.ui.templateSuffix" value="ftl" />

	<constant name="struts.devMode" value="true"></constant>
	<constant name="struts.configuration.xml.reload" value="true"></constant>
	
	<package name="myIntercepter" extends="struts-default" abstract="true">
		<!-- 拦截器 -->
		<interceptors>
			<!-- 自定义拦截器 -->
			<interceptor name="sessionItercepter" class="com.test.intercepter.SessionIntercepter" />
			<!-- 配制默许的拦截器到拦截器栈 -->
            <interceptor-stack name="sessionStack">
                <!-- 此处先后顺序没影响-->
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="sessionItercepter" />  <!-- 加上自己定义的拦截器 -->
            </interceptor-stack>
		</interceptors>
	</package>
	
	
	<package name="default" extends="myIntercepter">
	
		<!-- 全局跳转 -->
		<global-results >
			<result name="timeout">sessionout.jsp</result>
		</global-results>
		
		<action name="userAction" class="com.test.user.action.UserAction">
			<!-- 登录成功 -->
			<result name="right">main.jsp</result>
			<!-- 登录失败 -->
			<result name="error">error.jsp</result>
			<!-- 用户列表 -->
			<result name="all">all.jsp</result>
			<!-- 注销后返回登录,注:这里要重定向 -->
			<result name="login" type="redirect">/login.jsp</result>
			
			<result name="updateOK" type="redirect">userAction!getAllUserInit.action</result>
			
			<!-- 使用拦截器,一般配置在result之后, -->
			<interceptor-ref name="sessionStack"></interceptor-ref><!-- 调用拦截器栈 -->
		</action>
	</package>
	
</struts>



分享到:
评论

相关推荐

    Struts2拦截器及其用法详细说明

    Struts2 拦截器是Struts2框架的核心组件之一,它们允许开发者在Action执行前后插入自定义逻辑,实现跨切面的功能。拦截器基于Java的动态代理机制,能够独立于Action和Struts2框架进行扩展和复用。下面我们将深入探讨...

    struts2中request和session的获取

    Struts2的核心是拦截器(Interceptor),它可以处理用户的请求,并通过配置决定应用的行为。Struts2还支持多种插件,这些插件可以扩展框架的功能,满足不同的开发需求。 ### Request对象的理解与获取方式 #### ...

    struts2内置拦截器简介

    Struts2框架在实现MVC模式时,为了更好地管理请求处理过程中的各个阶段,引入了拦截器机制。通过拦截器可以对请求进行预处理或后处理,使得代码更加模块化和易于维护。Struts2提供了一系列内置的拦截器,这些拦截器...

    Struts2访问request,session,application的四种方式

    总结来说,Struts2提供了多种途径来访问和管理request、session和application的数据,包括ActionContext、ValueStack、OGNL和拦截器。掌握这些方法将有助于提高开发效率和代码质量,同时也能更好地理解和优化基于...

    tokenSession拦截器的使用

    在Java Web应用开发中,Struts2框架提供了一种非常实用的方法来解决这个问题——通过使用`tokenSession`拦截器。相比于传统的`token`拦截器,`tokenSession`提供了更加灵活和友好的用户体验。本文将深入探讨`token...

    Struts2内置拦截器简介

    当Struts2与Spring框架集成时,可以通过该拦截器实现依赖注入,从而避免手动配置依赖关系。 2. **Chain (链式调用)** - **功能**:支持在一个Action执行完毕后继续调用另一个Action。通常在复杂的业务逻辑中使用...

    Struts2解决未更新会话标识

    1. **使用拦截器(Interceptors)**:Struts2的核心特性之一是拦截器,它们可以在Action执行前后执行特定的任务。可以自定义拦截器来处理会话更新,例如在用户登录成功后,更新会话ID,并设置相关的用户信息。 2. *...

    struts2访问application、session以及request等web资源的示例代码

    在实际应用中,通常会结合Struts2的拦截器(Interceptor)来处理这些域数据,例如,可以在预处理(preintercept)阶段将数据放入域,然后在后处理(postintercept)阶段取出使用。 此外,Struts2还提供了Action上...

    Struts2默认拦截器解析.pdf

    Struts2是一个流行的Java web框架,它通过使用拦截器(Interceptor)来实现强大的功能和灵活的控制流程。在Struts2中,拦截器是AOP(面向切面编程)的一个重要概念,它们允许开发者在Action执行前后插入自定义逻辑,...

    struts2_session_权限检查并控制重复登录源码

    在权限控制方面,Struts2提供了拦截器机制,允许我们自定义拦截器实现用户权限的验证。 2. **Session检查**:在Web应用中,Session是一种常用的技术来跟踪用户的登录状态。当用户成功登录后,服务器会在用户的...

    struts拦截器介绍

    Struts2 框架是Java Web开发中广泛使用的MVC框架之一,...Struts2的拦截器机制为开发者提供了强大的扩展性和灵活性,允许他们在不改动Action核心逻辑的情况下,实现诸如日志记录、权限控制、数据验证等复杂的业务需求。

    structs2拦截器实例2-权限验证拦截器

    在提供的压缩包文件“struts2-authInterceptor”中,可能包含了实现上述步骤的源代码示例,包括拦截器类、配置文件和Action类。通过分析这些文件,你可以更好地理解如何在实际项目中实现权限验证拦截器。 总的来说...

    Struts2默认拦截器解析[归类].pdf

    Struts2是一个流行的Java web框架,它通过使用拦截器(Interceptor)来实现强大的功能和灵活的控制流程。拦截器在Action执行前后进行处理,增强了框架的功能,如日志、异常处理、模型驱动、国际化等。以下是对Struts...

    struts2自定义拦截器(处理用户未登录非法请求)

    在Struts2中,拦截器是实现业务逻辑和表示层解耦的重要工具,它们允许开发者在请求到达Action之前或之后执行特定的操作。在这个实例中,我们将探讨如何创建一个自定义拦截器来处理未登录用户的非法请求。 首先,...

    Struts2的Action中获得request response session几种方法

    默认情况下,Struts2已经配置了一些拦截器,例如`servletConfig`拦截器,它可以提供对servlet API的访问,包括request、response、session等。 在Action中,可以直接调用`ServletActionContext.getRequest()`、`...

    自定义拦截器实现防止重复提交

    在本案例中,由于项目组认为Struts2的标签性能不佳,所以选择了自定义拦截器来实现防止重复提交。 首先,我们来看如何创建自定义拦截器。在Struts2中,拦截器是基于AOP(面向切面编程)的概念,可以对Action的调用...

    struts2与cookie实现自动登录

    - Struts2的拦截器或自定义过滤器会检测到这个Cookie,读取其值并解密。 - 检查解密后的Token是否存在于服务器的Session中。如果存在,说明该用户已经通过了身份验证,可以直接跳转到主页面,实现自动登录效果;...

    Struts2的视频学习代码

    6. **拦截器(Interceptors)**:拦截器是Struts2中的一个强大特性,它可以拦截Action执行前后的流程,实现日志记录、权限验证、事务管理等功能。常见的拦截器有Params拦截器(处理请求参数),Validation拦截器...

    STRUTS2获得session和request

    STRUTS2利用拦截器(Interceptor)的概念来处理请求,使得开发者能够更专注于业务逻辑的编写,而不是框架本身。 ### Session与Request的概念 在Web开发中,`session`和`request`是两个非常重要的概念。`request`...

Global site tag (gtag.js) - Google Analytics