`
dou_shini8820
  • 浏览: 80818 次
社区版块
存档分类
最新评论

自己手写一个struts的权限拦截器Interceptor

    博客分类:
  • SSH
阅读更多

1、新建一个类PowerInterceptor实现了Interceptor接口(或者直接继承自AbstractInterceptor)

 

package com.luo.action.interceptor;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class PowerInterceptor implements Interceptor {

	private static final long serialVersionUID = 1L;
	private String sessionName;
	private String includeName;
	private List<String> nameList;
	
	public void destroy() {
		
	}

	public void init() {
		nameList=getIncludeNameList();
		System.out.println("拦截器初始化:"+nameList.size());
	}
	
	public List<String> getIncludeNameList(){
		List<String> list=new ArrayList<String>();
		if(includeName!=null&&!includeName.trim().equals("")){
			String[] names=includeName.trim().split(",");
			for (String name : names) {
				list.add(name);
			}
		}
		return list;
	}

	public String intercept(ActionInvocation invocation) throws Exception {
		String actionname=invocation.getProxy().getActionName();
		if(nameList.contains(actionname)){
			return invocation.invoke();
		}else{
			Map<String,Object> session=invocation.getInvocationContext().getContext().getSession();
			if(session.get(sessionName)==null){
				return "notLogin";
			}else{
				return invocation.invoke();
			}
		}
	}

	//get set
	public void setSessionName(String sessionName) {
		this.sessionName = sessionName;
	}
	public void setIncludeName(String includeName) {
		this.includeName = includeName;
	}
}

 

 

权限拦截器主要是不同的url访问时根据是否进行了登录,即是否有session的存在进行拦截。其中有的需要拦截,有的不需要有session也可以访问,比如首页index和跳转到登录页面的action都不需要拦截。

所以这里的变量sessionName是你定义的session中的key ,includeName 是一个以逗号分割的字符串用来存放哪些action是不需要被拦截的。他们的配置在struts.xml文件中:

 

 

<package name="ssh" extends="struts-default">
			<interceptors>
				<interceptor name="powerInterceptor" class="com.luo.action.interceptor.PowerInterceptor">
					<param name="sessionName">currentUser</param>
					<param name="includeName">login,userLogin</param>
				</interceptor>
				<interceptor name="mytimer" class="com.luo.action.interceptor.MyTimerInterceptor"></interceptor>
				<interceptor-stack name="mystack">
					<interceptor-ref name="powerInterceptor"/>
					<interceptor-ref name="mytimer"/>
					<interceptor-ref name="defaultStack"/>
				</interceptor-stack>
			</interceptors>
			
			<default-interceptor-ref name="mystack"></default-interceptor-ref>
			
			<global-results>
				<result name="notLogin" type="redirectAction">login.do</result>
			</global-results>

  

在interceptors这个节点下面我新配置了自己的powerInterceptor ,他需要有两个参数sessionName ,includeName 。sessionName 在你登录的代码中,登录成功则把当前用户名放到session中,其中的key就是sessionName。

由于要使用自己的拦截器,所以需要新建一个拦截器栈 interceptor-stack,里面用到了默认的defaultStack 和我自己的powerInterceptor  。

为了使拦截器生效,我让我系统默认的拦截器为mystack

7
0
分享到:
评论

相关推荐

    Struts配置文件使用及代码详解

    3. **拦截器机制**:Struts2的拦截器是其核心特性之一,它们可以实现如日志、权限检查、事务管理等功能,增强了代码的复用性和灵活性。 4. **配置驱动**:通过struts.xml配置文件,开发者可以方便地控制Action、...

    模拟struts

    8. **拦截器(Interceptor)**:Struts 2引入了拦截器机制,这是一种AOP(面向切面编程)的概念,可以用来实现日志、权限检查、事务管理等功能,提高了代码的可复用性和可维护性。 9. **Struts与Spring的整合**:在...

    struts2_spring2.5_ibatis开发指南

    **Struts2** 是Struts 1的升级版,它提供了更强大的动作调度、拦截器机制以及更灵活的视图绑定。`Struts 2 in Action.pdf` 和 `深入浅出Struts2中文版.pdf` 这两本书籍将帮助开发者理解Struts2的核心概念,如Action...

    java实现的论坛系统

    Struts2通过拦截器(Interceptor)机制实现了AOP(面向切面编程),使得全局的日志、事务管理等可以方便地进行插拔。此外,Struts2支持多种结果类型和模板技术,如JSP、FreeMarker、Velocity等,增强了视图的灵活性...

    SSH框架整合

    Struts2提供了丰富的拦截器(Interceptor)机制,可以方便地扩展功能,如权限验证、日志记录等。 **Hibernate** 是一款强大的对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作。Hibernate通过...

    SSH框架图解

    - **概述**:Struts 2是Struts 1的升级版,它基于拦截器(Interceptor)的设计模式,并且继承了Struts 1的优点,同时提供了更加灵活的配置机制。 - **优点**:易于集成、功能强大、可扩展性强等。 - **版本选择**:...

    ssh简单demo

    此外,Struts2引入了拦截器(Interceptor),可以实现更灵活的功能扩展。 3. **Hibernate**:Hibernate是一个对象关系映射(Object-Relational Mapping, ORM)框架,简化了Java应用与数据库之间的交互。在SSH demo...

    SSH框架需要的所有jar包

    SSH框架是Java Web开发中的一个流行组合,由Struts2、Hibernate和Spring三个核心框架组成。这个组合提供了模型-视图-控制器(MVC)架构、对象关系映射(ORM)以及依赖注入(DI)和面向切面编程(AOP)等功能,极大地...

    北大青鸟-OA

    它提供了拦截器(Interceptor)机制,使得我们可以定义自定义的行为来增强或改变请求处理的流程。在CRM系统中,Struts2可能被用来处理用户界面的交互,接收表单数据,调用Service层的方法,然后返回相应的视图给用户...

Global site tag (gtag.js) - Google Analytics