教务管理系统-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文件的不会细讲,文中的代码也比较简单,没有什么权限控制啊,拦截信息之类的代码,重点还是说明注解方式的使用方法,了解了使用方法之后,内容可以自...
  • u013160932
  • u013160932
  • 2015年03月21日 09:33
  • 3169

详述 Spring MVC 框架中拦截器 Interceptor 的使用方法

1 前言  昨天新接了一个需要,“拦截 XXX,然后 OOO”,好吧,说白了就是要用拦截器干点事(实现一个具体的功能)。之前,也在网络上搜了很多关于Interceptor的文章,但感觉内容都大同小异,...
  • qq_35246620
  • qq_35246620
  • 2017年03月30日 17:02
  • 7593

Struts2如何使用Interceptors

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

struts2拦截器interceptor的三种配置方法

1、struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 package name="struts2" extends="struts-def...
  • xyw591238
  • xyw591238
  • 2016年07月19日 10:45
  • 5701

MethodInterceptor拦截器 加注解精准拦截method

ps :这种方式 拦截的力度比较细 ,并且是可以自定义哪些具体方法被拦截 1.自定义一个annotation [java] view plain...
  • AlbertFly
  • AlbertFly
  • 2016年09月07日 18:46
  • 3529

struts2学习笔记之拦截器(Interceptor)

一、拦截器介绍 拦截器即interceptor 其实现类似于Servlet技术中的Filter,与AOP概念是相关的。 关于AOP可以参考: http://www.cnblogs.com/wa...
  • littleatp2008
  • littleatp2008
  • 2011年10月10日 00:20
  • 2620

interceptor-stack跟interceptor-ref的区别

interceptor-stack是一堆拦截器组成的一个拦截器栈。也可以当拦截器使用。 interceptor-ref是指定某个action使用哪一个拦截器,可以是一个interceptor,也...
  • mmoooodd
  • mmoooodd
  • 2014年06月04日 11:35
  • 3989

利用注解配置拦截器

struts2的拦截器是一个十分重要的功能,我们今天就讨论一下利用注解来配置拦截器,上代码。 public  class Test extends AbstractInterceptor{ priva...
  • yyd19921214
  • yyd19921214
  • 2015年01月10日 10:12
  • 351

struts2 注解配置拦截器 实例

/** * */ package com.wonders.stpt.contractReview.action; import java.util.ArrayList; import jav...
  • z69183787
  • z69183787
  • 2014年08月08日 15:49
  • 10636

struts2 -- interceptor(如何配置Interceptor)

1.interceptor的配置方法1. 普通配置法struts>    package name="struts2" extends="struts-default">        interce...
  • ForWayfarer
  • ForWayfarer
  • 2008年09月20日 13:57
  • 16597
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:教务管理系统-Struct2注解使用拦截器(Interceptor)
举报原因:
原因补充:

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