使用拦截器进行粗粒度的权限管理
1. 首先要在struts的配置文件中进行拦截器的配置
<package name="sys" extends="struts-default" namespace="/">
<interceptors>
<!-- 声明自己的拦截器,起名叫check,对应的class属性为自己编写的拦截器路径 -->
<interceptor name="check" class="com.scm.actions.sys.AuthorInterceptor" />
<!-- 定义拦截器栈,这里需要注意:在定制自己拦截器的同时,必须要把struts的默认栈加如里面,如果不加入,相当于把默认的覆盖了,会出现异常! -->
<interceptor-stack name="myCheck">
<interceptor-ref name="check" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 定义默认拦截器 -->
<default-interceptor-ref name="myCheck" />
<!-- 定义全局结果,用于在拦截器中返回登录页面或者错误提示页面 -->
<global-results>
<result name="login" type="redirect">/round.html</result>
<result name="error">/scm_templates/Samples/index.html</result>
</global-results>
</package>
2. 编写拦截器类
package com.scm.actions.sys;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.scm.domain.SysYonghu;
/**
* 拦截器需要继承AbstractInterceptor,或者是实现Interceptor接口(AbstractInterceptor也是实现的Interceptor)
*/
@SuppressWarnings("serial")
public class AuthorInterceptor extends AbstractInterceptor {
/*不清楚为什么,在拦截器中注入业务层或者数据访问层的对象始终为null,
但是注入action对象却可以,所以这里我注入action对象,然后在action中
转去调用业务层的方法..*/
private YongHuAction yonghuAction;
//getter and setter...
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("=======检查action=======");
// 获得拦截到的action名称
String actionName =invocation.getInvocationContext().getName();
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
//如果拦截到的action是请求登录的action,则放行.
if (actionName.equals("logins")) {
return invocation.invoke();
} else {
//session中取得当前用户.
SysYonghu yonghu = (SysYonghu) session.get("current_user");
//如果当前用户为空,转到登录页面.
if(yonghu==null){
session.put("tip", "请登录...");
return Action.LOGIN;
}
//调用action中的方法, 判断有无访问此动作的权限
boolean result=yonghuAction.isHave(actionName, yonghu);
if(result){
return invocation.invoke();
}else{
session.put("quanxian_tip", "您没有该资源的权限!");
return Action.ERROR;
}
}
}
}
3. 在使用的时候,如果有多个struts配置文件,只需要继承”sys”即可.如果其他配置文件中又定义了拦截器.那么这个拦截器将失效.
不足之处:拦截器只能拦截访问的action,如果直接访问jsp或其他视图,拦截器无法拦截. 所以应该配合filter使用;其实spring有自己的安全框架.可以把权限分的很细.希望有机会能用到.
分享到:
相关推荐
在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...
除了Struts2拦截器,我们还可以使用Servlet Filter进行权限验证。Filter是在HTTP请求进入Servlet之前运行的组件,它可以用于处理各种请求和响应过滤,包括登录验证。通常,我们在`web.xml`中配置Filter: ```xml ...
这篇文章将深入探讨Struts2拦截器的概念、工作原理以及如何在实际应用中使用它们。 **一、什么是Struts2拦截器** 拦截器是基于AOP(面向切面编程)思想的组件,它可以理解为在Action调用前后插入的逻辑处理。在...
3. 配置拦截器栈:Struts2使用拦截器栈的概念,即将多个拦截器组织成一个栈,按照栈的顺序依次执行。在`struts.xml`中,可以创建一个或多个拦截器栈,并将权限拦截器包含在内。 4. 应用拦截器:在Action配置中,...
本教程将详细介绍如何使用Struts2的拦截器来实现用户权限登录功能。 ### 一、拦截器的原理与作用 1. **原理**:拦截器工作在Action调用之前,它通过观察者模式实现,当一个请求到达时,会按照配置的顺序依次执行...
3. **权限验证**:拦截器可以实现用户登录检查,防止未授权的访问。 4. **数据校验**:在Action执行前,拦截器可以对输入数据进行校验,确保数据的合法性。 5. **业务逻辑增强**:如事务管理,可以在拦截器中进行...
Struts2拦截器(Interceptor) Struts2拦截器(Interceptor)
本文将深入探讨如何使用Struts2实现拦截器,以及如何配置拦截器来实现用户权限拦截。 首先,我们需要了解拦截器的工作原理。在Struts2中,拦截器是基于Java的动态代理机制实现的,它们按照预定义的顺序形成一个拦截...
Struts2中的拦截器可以通过XML配置文件或注解进行声明。例如,`struts-default.xml`中包含了默认的拦截器栈,如`params`拦截器用于处理请求参数,`exception`拦截器用于处理异常,`validation`拦截器进行数据校验。 ...
在Struts2中,拦截器是基于Java的动态AOP(面向切面编程)实现的,它可以在Action调用前后插入额外的逻辑,比如日志记录、权限验证、事务管理等。拦截器通过配置文件或者注解与Action关联,形成一个拦截器栈,每个...
这暗示了我们可能在测试中使用拦截器来处理数据库相关的逻辑,比如在执行SQL查询前进行事务管理,或者在查询后进行结果的处理和转换。 总的来说,Struts2拦截器为开发者提供了强大的工具,使他们能够优雅地扩展应用...
在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在Action执行前后插入自定义的逻辑,如日志、权限检查、事务管理等。现在我们将深入探讨Struts2的拦截器机制及其实例应用。 ### 一、Struts2拦截...
拦截器是Struts2框架的核心组件之一,它们在Action调用前后执行,提供了诸如日志记录、权限验证、数据校验等额外功能,极大地提高了代码的可复用性和可维护性。 在Struts2中,拦截器的使用主要基于两个方面:配置...
解决Struts2中的中文乱码。该代码是用作Struts2的拦截器中
在Struts2框架中,拦截器扮演着关键角色,它们提供了AOP(面向切面编程)的功能,使得开发者可以在不修改业务逻辑的情况下,对请求处理流程进行增强。本文将深入探讨Struts2的拦截器使用,结合实例和源码分析,帮助...
在Struts2框架中,拦截器主要用于对Action执行前后的过程进行干预,以便执行一些通用的功能,如验证用户输入、记录日志、事务管理等。 - **拦截器的核心功能**:Struts2拦截器可以动态地拦截发送到指定Action的请求...
### Struts2拦截器的使用方法 #### 一、Struts2拦截器概述 Struts2框架中的拦截器(Interceptor)是一种重要的机制,用于在Action执行前后进行一系列处理,比如参数验证、数据预处理等。它能够帮助开发者更加灵活...
在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的基本概念。拦截器是在Action调用之前和之后执行的一段代码,可以用来做日志记录、权限检查...
在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在动作执行前后插入自定义的逻辑,如日志、权限检查、数据验证等。本示例将探讨如何在Struts2中使用拦截器。 首先,我们需要理解Struts2拦截器的...
struts2常用拦截器,struts2经常用到的拦截器,熟悉熟悉