教务管理系统-Struct2注解使用拦截器(Interceptor)

原创 2016年05月31日 15:48:58

在我的毕业设计——基于SSH的教务管理系统,做了一个简单的权限控制,通过控制Action来对三个角色管理员、教师、学生进行控制。打算通过使用拦截器进行过滤。

在系统设计之初,我计划尽量少使用配置文件,尽量使用注解,所以在使用Struct2的拦截器的时候也计划使用注解来实现。下面是我定义的拦截器:

package com.edu.interceptor;

import org.apache.struts2.ServletActionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

/**
 * 拦截器:权限控制
 *
 * xukai 2016年5月18日下午4:43:11
 */
public class ActionInterceptor extends AbstractInterceptor {

	private static final Logger logger = LoggerFactory.getLogger(ActionInterceptor.class);

	/**
	 * 
	 */
	private static final long serialVersionUID = -5004702507890081515L;

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {

		String url = ServletActionContext.getRequest().getRequestURL().toString();
		if (url.contains("login")) {
			return arg0.invoke();
		}
		String actionName = arg0.getAction().getClass().getName();
		logger.info("MethodInceptor.getAction: " + actionName);
		// 获得身份
		String identity = (String) ActionContext.getContext().getSession().get("identity");
		// 拦截Action
		if (actionName != null && ( actionName.equals("com.edu.action.UserAction")) {
			if (identity != null && identity.equals("admin")) {
				return arg0.invoke();
			}
		}
		if (actionName != null && (actionName.equals("com.edu.action.StudentAction"))) {
			if (identity != null && identity.equals("student")) {
				return arg0.invoke();
			}
		}
		if (actionName != null && (actionName.equals("com.edu.action.TeacherAction"))) {
			if (identity != null && identity.equals("teacher")) {
				return arg0.invoke();
			}
		}
		ServletActionContext.getRequest().setAttribute("msg", "您的权限不足!");
		return "error";
	}

}
可以业务逻辑是通过获取身份,然后决定是否能访问某个Action。

在Action上进行注解标注:

@InterceptorRefs(value = {
		@InterceptorRef(value = "defaultStack"),
		@InterceptorRef(value = "actionInterceptor")
})
发现这里的value竟然没有对应的值,在使用配置文件的时候,是在配置文件中定义的,但是我没有添加struct.xml文件,使用的是全注解,所有我百度查,是否可以在ActionInterceptor上面添加某个注解,达到标准此类事是一个拦截器,从而对应InterceptorRef中的value,这个value我猜测就是拦截器的ref-name。

最后还是没有办法,区服了,添加了structs.xml文件:

	<package name="xk-default" extends="json-default, struts-default">
		<interceptors>
			<!-- 配置自己定义的拦截器 -->
			<interceptor name="actionInterceptor" class="com.edu.interceptor.ActionInterceptor">
			</interceptor>
			<!-- 配置全局的拦截器栈,替换系统的拦截器栈 -->
			<interceptor-stack name="MYSTACK">
				<interceptor-ref name="actionInterceptor"></interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>

		<default-interceptor-ref name="defaultStack"></default-interceptor-ref>
		
	</package>
我隐约在structs的源码哪里好像看到了,拦截器的加载是通过配置文件进行读入的,所以不能使用注解进行拦截器的标识。现在又找不到了,大神如果有办法解决的话,求指点。



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

struts2注解总结----@InterceptorRef

写在前面: 本文主要讲的是注解方式的拦截器的使用,所以xml文件的不会细讲,文中的代码也比较简单,没有什么权限控制啊,拦截信息之类的代码,重点还是说明注解方式的使用方法,了解了使用方法之后,内容可以自...

Struts2零配置开发(注解Annotation的使用)一

以前使用Struts2的时候参数都是在struts.xml里面配置的,现在转入了一个新的项目中,发现这个项目struts.xml中只定义了几个常量,并没有大量的action、interceptor的配...
  • oathevil
  • oathevil
  • 2011年12月19日 17:19
  • 23820

struts2 注解配置拦截器 实例

/** * */ package com.wonders.stpt.contractReview.action; import java.util.ArrayList; import jav...

struts2注解下的拦截器配置

貌似这个这问题已经纠结了半年了,网上找资料也不是很多。上周六调试通了。借CSDN mark一下吧。 一  、实现 1、 首先上拦截器部分的代码 public clas...

struts2 -- interceptor(如何配置Interceptor)

1.interceptor的配置方法1. 普通配置法struts>    package name="struts2" extends="struts-default">        interce...

Struts2自定义Interceptor

1.继承类AbstractInterceptor import javax.servlet.http.HttpServletRequest; import org.apache.struts2...
  • unei66
  • unei66
  • 2013年07月11日 15:22
  • 5001

Struts2如何使用Interceptors

首先要明确Interceptor(拦截器)的作用,一般用于文件上传验证等,在本文将省略详细说明。写一个Interceptor类,必须覆写intercept方法,intercept方法的结构大体是这样的...
  • xwlxw
  • xwlxw
  • 2013年09月02日 12:04
  • 6692

Struts2 拦截器(Interceptor )原理和配置

一、Struts2拦截器原理: Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的    拦截器对象,然后串成...

AndroidStudio上传提交项目到Github(带SSH)

一、下载安装Githttps://git-scm.com/download/win。。。。安装完毕二、AS配置Git信息 配置Git File -> Settings -> Version Cont...

Android Studio Git 版本控制 on Windows10--从系统配置到具体使用

之前笔者比较习惯在linux 环境上使用eclipse 开发,另外在terminal中使用git 命令对代码进行版本控制。后来工作环境渐渐往Windows Android Studio环境迁移,现在描...
  • lqh517
  • lqh517
  • 2016年06月14日 17:07
  • 911
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:教务管理系统-Struct2注解使用拦截器(Interceptor)
举报原因:
原因补充:

(最多只允许输入30个字)