`
dreamoftch
  • 浏览: 484896 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

struts2自定义Interceptor基本使用

阅读更多
public class MyInterceptor extends com.opensymphony.xwork2.interceptor.Interceptor{
	
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
//<action name="xxx" class="yyy" method="zzz">
		String namespace_action = invocation.getProxy().getNamespace();//命名空间
		String actionName_action = invocation.getProxy().getActionName();//action名字xxx
		String method_action = invocation.getProxy().getMethod();//method名字zzz

		ActionContext context = invocation.getInvocationContext();
		Map<String, Object> session = context.getSession();
		
		HttpServletRequest request = (HttpServletRequest) invocation
				.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
		HttpServletResponse response = (HttpServletResponse) invocation
				.getInvocationContext().get(StrutsStatics.HTTP_RESPONSE);
	}

}

 

 

 

下面是一个处理同一账号只能在一个地方登陆的拦截器简单实现:

 

package com.tch.test.ssh.interceptor;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.StrutsStatics;
import org.springframework.stereotype.Component;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.tch.test.ssh.entity.User;
import com.tch.test.ssh.info.LoginInfo;
import com.tch.test.ssh.info.UserInfo;
@Component("checkLogin")
public class CheckLoginInterceptor implements Interceptor {
	private static final long serialVersionUID = 1L;

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("interceptor............................");
		HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);  
		String url = request.getRequestURI();
		if(url.contains("/ssh/login.action")){
			//登陆
			return invocation.invoke();
		}
		//已经登陆
		HttpSession session = request.getSession();
		Date current_login_time = (Date) session.getAttribute("login_time");//一个账号登陆之后会在session中保存此次登陆的时间
		User user = (User) session.getAttribute("login_user");
		if(user == null || user.getId() == null || current_login_time == null){
			//session中没有相关信息,则重新登录
			return "login";
		}
		LoginInfo info = (LoginInfo)UserInfo.LOGIN_USERS.get(user.getId());//账号登陆之后,会在服务器端保存该账号的登录时间,当有另外一个登陆的时候,会更新该时间,从而保证是最近的登陆时间
		if(info != null && info.getLoginTime() != null){
			Date latest_login_time = info.getLoginTime();
			if(latest_login_time.getTime() > current_login_time.getTime()){//比较session中的登录时间和服务器保存的登录时间,确定该登陆是否是最新的登陆
				ActionContext.getContext().put("errorMessage", "账号在别处登录,当前用户被强制退出 !");
				session.invalidate();
				System.out.println("*****************删除session*************");
				return "error";
			}
		}
		return invocation.invoke();
	}

	@Override
	public void destroy() {
	}

	@Override
	public void init() {
	}
}

 

然后再struts.xml中配置该拦截器:

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<constant name="struts.enable.DynamicMethodInvocation" value="true" />
	<constant name="struts.devMode" value="true" />
	<!-- 定义一个自己的package,在里面定义拦截器栈,后面的package继承该package即可使用里面的拦截器 -->
	<package name="mypackage" extends="struts-default">
		<interceptors>
			 <interceptor name="checkLogin" class="checkLogin"></interceptor>
			 <interceptor-stack name="myStack">
		              <interceptor-ref name="checkLogin"/>
		              <interceptor-ref name="defaultStack"/>
		     </interceptor-stack>
		</interceptors>
                <!--  设置默认的拦截器栈为自定义的拦截器栈,这样就可以对所有的请求拦截处理了  -->
		<default-interceptor-ref name="myStack"/>
	</package>
	<package name="default" namespace="/" extends="mypackage">
		<default-action-ref name="index" />
		<global-results>
			<result name="error">/user/pages/loginError.jsp</result>
			<result name="login">/index.jsp</result>
		</global-results>
		<global-exception-mappings>
			<exception-mapping exception="java.lang.Exception"
				result="error" />
		</global-exception-mappings>
		<action name="show" class="userAction" method="select">
			<result>/WEB-INF/pages/User.jsp</result>
		</action>
		<action name="goEdit" class="userAction" method="goEdit">
			<result>/WEB-INF/pages/editUser.jsp</result>
		</action>
		<action name="login" class="userAction" method="login">
			<result>user/pages/all.jsp</result>
			<result name="error">/user/pages/loginError.jsp</result>
		</action>
		<!-- 使用通配符 -->
		<action name="*User" class="userAction" method="{1}User">
			<result type="redirectAction">
				<param name="actionName">show</param>
				<param name="namespace">/</param>
			</result>
		</action>
	</package>
</struts>

 

 

 

 

 

分享到:
评论

相关推荐

    Struts2.3.6实现自定义拦截器Interceptor

    Struts2.3.6实现自定义拦截器Interceptor http://blog.csdn.net/alanchen520/article/details/34086699

    使用struts2拦截器对登陆权限验证

    综合使用servlet filter与struts2 interceptor对权限进行验证。

    Struts2_自定义拦截器

    Struts2_自定义拦截器 struts2_3500_my_interceptor

    Java struts2 Spring 整合文档附加演示工程

    3.struts2_interceptor 拦截器,自定义拦截器 4.struts2_log4j 5.struts2_spring struts spring 整合 以上功能包含完整示例代码 Eclipse Java EE IDE for Web Developers. Build id: 20090920-1017 Tomcat6.0 下编译...

    struts2的自定义拦截器代码

    struts2的自定义拦截器代码

    Struts2入门教程(全新完整版)

    十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...

    Struts2 in action中文版

    8.1.1 页面上:如何使用自定义结果组件构建Struts 2 Ajax应用程序 171 8.1.2 实现JSON结果类型 173 8.2 常用的结果类型 180 8.2.1 RequestDispatcher,也叫做dispatcher 180 8.2.2 ServletRedirectResult,也叫做...

    Struts2串讲

    1、Struts2概述 2、Struts2的前端控制器 3、自定义Interceptor 4、一些常用的API和数据模型 5、一些标签的使用

    深入浅出Struts2(附源码)

    14.3.1 使用基本身份验证方法 243 14.3.2 使用基于表单的身份验证方法 245 14.4 隐藏资源 247 14.5 Struts安全配置 248 14.6 以编程方式提高安全性 250 14.6.1 getAuthType方法 250 14.6.2 isUserInRole方法 ...

    JSP 开发之Struts2内建自定义拦截器

    JSP 开发之Struts2内建自定义拦截器 Struts2的自定义拦截器主要用于解析请求参数,将请求参数赋值给Action属性,执行数据校验,文件上传等等操作。当需要扩展Struts2的功能时,我们只需要提供相应的拦截器并将它配置...

    Struts拦截器及token拦截器防止重复提交例子源码

    Struts2规定用户自定义拦截器必须实现com.opensymphony.xwork2.interceptor.Interceptor接口。该接口声明了3个方法, void init(); void destroy(); String intercept(ActionInvocation invocation) throws ...

    Servlet简单模拟Struts2

    用sevrlet模拟Struts2的简单功能。从拦截请求、解析自定义xml数据文件以及动态生成action的代理去执行目标方法,并实现了简单的日志拦截【interceptor】

    Struts2 入门培训

    4 1.3.2. 受控目录 5 2. 入门例子 5 2.1. 项目 5 2.2. 在WEB.XML中,配置FILTERDISPATCHER过滤器 6 2.3. 配置STRUTS.PROPERTIES 6 2.4. 编写一个简单的ACTION类 7 2.5. STRUTS.XML配置文件 8...

    Struts2演示源码

    该代码演示了Action中result的四种转发类型、多文件上传、自定义拦截器、对Action中方法进行输入校验以及OGNL表达式等内容。

    Struts:Strurs的Somp应用

    Struts2Interceptor: 关于Struts自定义拦截器的应用 Struts2ParameterPostMethod_common: 关于Struts普通传值的应用 Struts2ParameterPostMethod_packagebybean: 关于Struts封装参数传递的应用 Struts2SQLConnection...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    14.3.1 使用基本身份验证方法 243 14.3.2 使用基于表单的身份验证方法 245 14.4 隐藏资源 247 14.5 Struts安全配置 248 14.6 以编程方式提高安全性 250 14.6.1 getAuthType方法 250 14.6.2 isUserInRole方法 250 ...

    struts2拦截器

    拦截器可以说相当于是个过滤器:就是把你不想要的或不想显示的内容给过滤掉。拦截器可以抽象出一部分代码可以用来完善原来的...这样如果有新增权限的话,不用在Action里修改任何代码,直接在Interceptor里修改就行了。

    spring2.5 struts2.0 hibernate3.2.5 搭建的企业级开发基础模块

    Struts:struts.xml、struts.properties 配置很简单,用点心看就会了,多的不说了,好好享受咯 哦 忘记介绍了, 当中还有本人写的几个自定义标签:com.light.framework.tag 自定义标签的帮助类:...

Global site tag (gtag.js) - Google Analytics