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拦截器是实现用户权限控制的关键工具。通过创建自定义的拦截器,检查用户登录状态,并在配置文件中指定拦截器的使用,我们可以有效地阻止未登录用户访问受保护的资源,从而提高Web应用的安全性。...
4. **拦截器**:类似于Spring的AOP(面向切面编程),Structs2的拦截器可以对Action调用前后的操作进行拦截,实现如日志记录、权限验证等功能。 5. **模板引擎支持**:Structs2可以与多种视图模板引擎集成,如...
在Structs中,这些可以通过自定义拦截器或过滤器实现,从而增强应用程序的安全性。 总结起来,Structs为文件上传和下载提供了简洁的API和强大的扩展性。通过理解其工作原理并合理配置,开发者可以轻松地在Structs...
本实例可能会展示如何使用Struts2的拦截器进行权限控制,确保只有登录用户才能访问特定的页面或功能。 除了以上核心功能,这个实例可能还涵盖了其他相关知识点,如JSP、Servlet、数据库操作(可能使用JDBC或ORM框架...
拦截器是Struts 2引入的重要特性,它们可以在Action执行前后插入额外的行为,如日志记录、权限验证等。 九、Struts 2与Struts 1的区别 1. **ActionContext**:Struts 2引入了ActionContext,为每个请求提供上下文...
2. **拦截器(Interceptors)**:Struts2的核心特性之一是拦截器,它们像过滤器一样,按照预定义的顺序在Action调用前后执行,用于处理如日志记录、事务管理、权限检查等通用任务。 3. **配置与注解**:Struts2支持...
3. **Interceptors**:拦截器是Struts2的核心组件之一,它们是可插拔的代码模块,能在Action执行前后进行额外的操作,比如日志记录、权限检查等。 4. **API文档**:Struts的官方API文档是开发者的重要参考资料,...
### Spring框架登录初始化数据与Struts2权限设置等相关知识 #### 一、数据库操作 **1. 对象作为WHERE条件** 在使用SSH框架时,经常需要根据对象的属性来进行数据库查询,特别是在分页操作中。这里涉及到的关键...
**拦截器**:Struts2引入了拦截器的概念,允许开发者实现AOP(面向切面编程),例如进行权限控制、日志记录、性能监控等。拦截器堆栈使得这些操作能够在业务逻辑执行前后被插入,提高了代码的可维护性和灵活性。 **...
此外,Struts还提供了拦截器机制,可以实现如权限验证、日志记录等通用功能。 **Spring** 是一个全面的后端应用程序框架,它支持依赖注入(DI)和面向切面编程(AOP)。在SSM中,Spring主要负责管理Bean,包括...
前者定义了Action映射、数据源、结果页面等,后者是Servlet容器的部署描述符,用于配置Struts拦截器和过滤器。 4. **JSP视图**: 视图部分通常由JSP(JavaServer Pages)页面组成,它们展示数据和用户界面。在这个...
拦截器链模型使得事务管理、权限检查、日志记录等功能的实现变得简单。 4. **结果类型**:结果类型决定了Action执行后如何跳转到下一个页面。默认的结果类型是dispatcher,它将结果值解析为JSP或FreeMarker模板。...
在权限管理方面,Structs2可以通过拦截器或自定义过滤器来实现对URL的访问控制,限制不同用户访问特定的页面或操作。 2. **Spring**:Spring是Java企业级应用开发的核心框架,提供了依赖注入、AOP(面向切面编程)...
- **Interceptor**:拦截器用于处理请求的前后置操作,如权限验证、数据校验等功能。通过定义拦截器链,可以灵活控制请求的执行流程。 - **Result**:Result用于定义Action执行后的结果,如重定向到另一个页面或者...
4. **拦截器**:拦截器是Struts2框架的一个重要特性,它们按照定义的顺序在Action执行前后执行,可以实现如日志、权限检查、数据校验等功能。例如,`ValidationInterceptor`用于进行表单验证,`ExceptionInterceptor...
10. **拦截器(Interceptor)**:虽然Struts1不直接支持拦截器,但可以通过自定义RequestProcessor实现类似的功能,例如日志记录、权限验证等。 11. **Tiles框架集成**:Tiles允许将页面拆分为可重用的组件,通过...
7. **Interceptor(拦截器)**: 拦截器是Struts2的一大特色,它可以插入到Action调用链中,执行预处理或后处理操作,如权限检查、日志记录等。 8. ** strut2-convention-plugin**: Struts2提供了一种约定优于配置的...
- **Interceptor**:拦截器是Struts2中的重要特性,它可以像过滤器一样在Action调用前后执行额外的操作,如日志记录、权限验证、性能监控等。 - **Value Stack**:值栈是Struts2用于存储Action属性和模型对象的...
1. **配置Structs**:在Structs的配置文件中,添加对CAS的依赖,如在`struts.xml`中引入CAS的拦截器或者过滤器。 2. **CAS客户端集成**:安装并配置CAS客户端库,如`cas-server-support-generic`,以便处理CAS的...
4. 在调用Action之前,配置好的拦截器(Interceptor N)按照预设顺序执行,这些拦截器可以进行权限检查、日志记录等功能。 5. Action执行实际的业务逻辑,如验证用户信息、查询余票、处理支付等,并返回结果字符串。...