`
Peerless_
  • 浏览: 4339 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

公共數據權限過濾 (使用 structs 拦截器)

    博客分类:
  • java
阅读更多
1.先定义一个注解
package com.efoxconn.ipebg.protoline.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface DataAuth {
	public String[] types() default {"project", "site"};
}


2.创建拦截器
package com.efoxconn.ipebg.protoline.interceptor;

import java.lang.reflect.Method;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.efoxconn.ipebg.protoline.annotation.DataAuth;
import com.efoxconn.ipebg.protoline.util.CheckDataUtil;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
@Component
@SuppressWarnings("unchecked")
public class DataAuthInterceptor extends AbstractInterceptor {

	/**
	 * 公共數據權限過濾
	 */
	private static final long serialVersionUID = -4013438146040038934L;
	@Autowired
	CheckDataUtil checkDataUtil;
	
	private String transName(String name){
		return name+"_id";
	}
	
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		String methodName=invocation.getProxy().getMethod();
		Class<?> clazz=invocation.getAction().getClass();
		Method method=clazz.getMethod(methodName);
		DataAuth dataAuth = null;
		
		if(clazz.isAnnotationPresent(DataAuth.class)){
			dataAuth=clazz.getAnnotation(DataAuth.class);
		}else if (method.isAnnotationPresent(DataAuth.class)) {
			dataAuth=method.getAnnotation(DataAuth.class);
		}
		if (dataAuth!=null) {
			Method getMethod=clazz.getMethod("getParams");
			Method setMethod=clazz.getMethod("setParams", Map.class);
			Map params = (Map) getMethod.invoke(invocation.getAction());
			String[] types = dataAuth.types();
			for(String type : types){
				String name = transName(type);
				if(params.containsKey(name)){
					params.put(name, checkDataUtil.checkAuth((String) params.get(name), "auth_"+type));
				}
			}
			setMethod.invoke(invocation.getAction(), params);
		}
		return invocation.invoke();	
	}

}


3. 配置拦截器
在struts的配置文件里
<interceptors>
			<interceptor name="dataAuth" class="dataAuthInterceptor"/>
			<interceptor-stack name="dataAuthStack" >
				<interceptor-ref name="actionStack"/>
				<interceptor-ref name="dataAuth"/>
			</interceptor-stack>
</interceptors>
<default-interceptor-ref name="dataAuthStack"/>

4. 在需要使用的类或方法上加上注解就好了
分享到:
评论

相关推荐

    structs2拦截器做的阻止未登录的用户访问

    综上所述,Structs2拦截器是实现用户权限控制的关键工具。通过创建自定义的拦截器,检查用户登录状态,并在配置文件中指定拦截器的使用,我们可以有效地阻止未登录用户访问受保护的资源,从而提高Web应用的安全性。...

    structs2基本jar包

    4. **拦截器**:类似于Spring的AOP(面向切面编程),Structs2的拦截器可以对Action调用前后的操作进行拦截,实现如日志记录、权限验证等功能。 5. **模板引擎支持**:Structs2可以与多种视图模板引擎集成,如...

    structs文件上传下载

    在Structs中,这些可以通过自定义拦截器或过滤器实现,从而增强应用程序的安全性。 总结起来,Structs为文件上传和下载提供了简洁的API和强大的扩展性。通过理解其工作原理并合理配置,开发者可以轻松地在Structs...

    struts2实例 自定义过滤器 文件上传下载 登录功能

    本实例可能会展示如何使用Struts2的拦截器进行权限控制,确保只有登录用户才能访问特定的页面或功能。 除了以上核心功能,这个实例可能还涵盖了其他相关知识点,如JSP、Servlet、数据库操作(可能使用JDBC或ORM框架...

    structs教程

    拦截器是Struts 2引入的重要特性,它们可以在Action执行前后插入额外的行为,如日志记录、权限验证等。 九、Struts 2与Struts 1的区别 1. **ActionContext**:Struts 2引入了ActionContext,为每个请求提供上下文...

    Structs2.0 权威指南

    2. **拦截器(Interceptors)**:Struts2的核心特性之一是拦截器,它们像过滤器一样,按照预定义的顺序在Action调用前后执行,用于处理如日志记录、事务管理、权限检查等通用任务。 3. **配置与注解**:Struts2支持...

    structs配置

    3. **Interceptors**:拦截器是Struts2的核心组件之一,它们是可插拔的代码模块,能在Action执行前后进行额外的操作,比如日志记录、权限检查等。 4. **API文档**:Struts的官方API文档是开发者的重要参考资料,...

    spring框架登录初始化数据与struct2权限设置等相关知识

    ### Spring框架登录初始化数据与Struts2权限设置等相关知识 #### 一、数据库操作 **1. 对象作为WHERE条件** 在使用SSH框架时,经常需要根据对象的属性来进行数据库查询,特别是在分页操作中。这里涉及到的关键...

    structs2教程

    **拦截器**:Struts2引入了拦截器的概念,允许开发者实现AOP(面向切面编程),例如进行权限控制、日志记录、性能监控等。拦截器堆栈使得这些操作能够在业务逻辑执行前后被插入,提高了代码的可维护性和灵活性。 **...

    ssm(structs+spring+mybatis)完整项目内含项目包

    此外,Struts还提供了拦截器机制,可以实现如权限验证、日志记录等通用功能。 **Spring** 是一个全面的后端应用程序框架,它支持依赖注入(DI)和面向切面编程(AOP)。在SSM中,Spring主要负责管理Bean,包括...

    简单的structs项目任务管理系统

    前者定义了Action映射、数据源、结果页面等,后者是Servlet容器的部署描述符,用于配置Struts拦截器和过滤器。 4. **JSP视图**: 视图部分通常由JSP(JavaServer Pages)页面组成,它们展示数据和用户界面。在这个...

    structs 2 源码

    拦截器链模型使得事务管理、权限检查、日志记录等功能的实现变得简单。 4. **结果类型**:结果类型决定了Action执行后如何跳转到下一个页面。默认的结果类型是dispatcher,它将结果值解析为JSP或FreeMarker模板。...

    SSI整合程序实例 权限管理

    在权限管理方面,Structs2可以通过拦截器或自定义过滤器来实现对URL的访问控制,限制不同用户访问特定的页面或操作。 2. **Spring**:Spring是Java企业级应用开发的核心框架,提供了依赖注入、AOP(面向切面编程)...

    structs 英文教材

    - **Interceptor**:拦截器用于处理请求的前后置操作,如权限验证、数据校验等功能。通过定义拦截器链,可以灵活控制请求的执行流程。 - **Result**:Result用于定义Action执行后的结果,如重定向到另一个页面或者...

    Struts2.zip

    4. **拦截器**:拦截器是Struts2框架的一个重要特性,它们按照定义的顺序在Action执行前后执行,可以实现如日志、权限检查、数据校验等功能。例如,`ValidationInterceptor`用于进行表单验证,`ExceptionInterceptor...

    Struts1.x系列教程文档【技术文档】

    10. **拦截器(Interceptor)**:虽然Struts1不直接支持拦截器,但可以通过自定义RequestProcessor实现类似的功能,例如日志记录、权限验证等。 11. **Tiles框架集成**:Tiles允许将页面拆分为可重用的组件,通过...

    基于Struts2的留言板系统.zip

    7. **Interceptor(拦截器)**: 拦截器是Struts2的一大特色,它可以插入到Action调用链中,执行预处理或后处理操作,如权限检查、日志记录等。 8. ** strut2-convention-plugin**: Struts2提供了一种约定优于配置的...

    struts2介绍及应用

    - **Interceptor**:拦截器是Struts2中的重要特性,它可以像过滤器一样在Action调用前后执行额外的操作,如日志记录、权限验证、性能监控等。 - **Value Stack**:值栈是Struts2用于存储Action属性和模型对象的...

    cas client增加stucts框架 服务端返回用户其它信息

    1. **配置Structs**:在Structs的配置文件中,添加对CAS的依赖,如在`struts.xml`中引入CAS的拦截器或者过滤器。 2. **CAS客户端集成**:安装并配置CAS客户端库,如`cas-server-support-generic`,以便处理CAS的...

    火车购票系统

    4. 在调用Action之前,配置好的拦截器(Interceptor N)按照预设顺序执行,这些拦截器可以进行权限检查、日志记录等功能。 5. Action执行实际的业务逻辑,如验证用户信息、查询余票、处理支付等,并返回结果字符串。...

Global site tag (gtag.js) - Google Analytics