struts2使用拦截器

5 篇文章 0 订阅

拦截器应该算是struts2的核心了,struts2的这些东西都离不开拦截器,拦截器开发中用的地方其实不多,例如过滤器的功能还不能满足实际需要,拦截器或许是不同的选择,拦截器对资源的控制粒度要比过滤器要细一点,我觉得下面两种情况笔记适合使用过滤器

1.某些action不能被随意访问

2.过滤器不能满足的某些权限控制

例如项目要求只有登录后的用户才能调用某些action,但是用于登录的action没个人都能访问。这个要求或许过滤器能实现但是很容易出现循环重定向的情况,这种情形使用拦截器应该是较好的选择

1.编写拦截器

拦截器应继承AbstractInterceptor,如果没有继承这个类,程序会报错

package com.ssi.interceptor;

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

import org.apache.struts2.ServletActionContext;

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

public class SessionInterceptor extends AbstractInterceptor{

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		HttpServletRequest req = ServletActionContext.getRequest();
		HttpSession session = req.getSession();
		HttpServletResponse res = ServletActionContext.getResponse();
		if (session.getAttribute("userInfo")!=null){
			arg0.invoke();
		} else {
			res.sendRedirect("../index.jsp");
		}
		return null;
	}

}

这个类和过滤器有点像,这里通过session判断用户是否登录,如果session不为空则程序继续执行,此时action里方法会执行,如果session为空则重定向到登录页面


2.配置自定义拦截器栈

<interceptors>
<interceptor name="loginJudge" class="com.ssi.interceptor.SessionInterceptor">/interceptor>
	<!-- 自定义拦截器栈 -->
	<interceptor-stack name="myDefaultStack">
		<interceptor-ref name="loginJudge"></interceptor-ref>
		<interceptor-ref name="defaultStack"></interceptor-ref>
	</interceptor-stack>
</interceptors>
<!-- 将自定义拦截器栈设置默认的拦截器 -->
<default-interceptor-ref name="myDefaultStack" />

3.完整的配置

<!-- 项目信息管理 -->
<package name="projectAction" namespace="/project" extends="struts-default">
		<interceptors>
			<interceptor name="loginJudge"
				class="com.ssi.interceptor.SessionInterceptor">
			</interceptor>
			<!-- 自定义拦截器栈 -->
			<interceptor-stack name="myDefaultStack">
				<interceptor-ref name="loginJudge"></interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<!-- 将自定义拦截器栈设置默认的拦截器 -->
		<default-interceptor-ref name="myDefaultStack" />
		<action name="projectAction" class="projectAction">
			<result name="success">/manage/projects/ProjectList.jsp</result>
			<result name="toEdit">/manage/projects/ProjectEdit.jsp</result>
			<result name="getProjectForPersonal">/manage/projects/PersonalProjectList.jsp</result>
		</action>
</package>

如果是涉及到登录的action,这些拦截器就不配置上去就行了

<package name="loginAction" namespace="/login" extends="struts-default">
		<action name="loginAction" class="loginAction">
			<result name="success">/manage/index.jsp</result>
			<result name="logout">../index.jsp</result>
		</action>
</package>

是不是足够的简单呢,如果没用过struts2的可以看下这篇文章:

http://blog.csdn.net/walkcode/article/details/7001986

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值