`
aaagu1234
  • 浏览: 148873 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2 权限控制拦截器

阅读更多
1 实现权限控制拦截器
本示例应用要求用户登陆,且必须为指定用户名才可以查看系统中某个视图资源;否则,系统直接转入登陆页面。对于上面的需求,可以在每个Action的执行实际处理逻辑之前,先执行权限检查逻辑,但这种做法不利于代码复用。因为大部分Action里的权限检查代码都大同小异,故将这些权限检查的逻辑放在拦截器中进行将会更加优雅。

检查用户是否登陆,通常都是通过跟踪用户的Session来完成的,通过ActionContext即可访问到Session中的属性,拦截器的intercepte(ActionInvocation invocation)方法的invocation参数可以很轻易地访问到请求相关的ActionContext实例。
权限检查拦截器类的代码如下:
//权限检查拦截器继承AbstractInterceptor类
public class AuthorityInterceptor extends AbstractInterceptor
{
//拦截Action处理的拦截方法
public String intercept(ActionInvocation invocation) throws Exception
{
//取得请求相关的ActionContext实例
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
//取出名为user的Session属性
String user = (String)session.get("user");
//如果没有登陆,或者登陆所用的用户名不是scott,都返回重新登陆
if (user != null && user.equals("scott") )
{
return invocation.invoke();
}
//没有登陆,将服务器提示设置成一个HttpServletRequest属性
ctx.put("tip" , "您还没有登陆,请输入scott,tiger登陆系统");
//直接返回login的逻辑视图
return Action.LOGIN;
}
}
上面拦截器代码非常简单,先通过ActionInvocation参数取得用户的Session实例的引用,然后从中取出user属性,通过判断该属性值来确定用户是否登陆系统,从而判断是否需要转入登陆页面。

2 配置权限控制拦截器
一旦实现了上面的权限检查拦截器,就可以在所有需要实现权限控制的Action中复用上面的拦截器。
为了使用该拦截器,首先在struts.xml文件中定义该拦截器,定义拦截器的配置片段如下:
<!-- 用户拦截器定义在该元素下 -->
<interceptors>
<!-- 定义了一个名为authority的拦截器 -->
<interceptor name="authority" class="lee.AuthorityInterceptor"/>
</interceptors>
定义了该拦截器之后,可以在Action中应用该拦截器,应用该拦截器的配置片段如下:
<!-- 定义一个名为viewBook的Action,其实现类为ActionSupport -->
<action name="viewBook">
<!-- 返回success视图名时,转入/WEB-INF/jsp/viewBook.jsp页面 -->
<result>/WEB-INF/jsp/viewBook.jsp</result>
<!-- 拦截器一般配置在result元素之后! -->
<interceptor-ref name="defaultStack"/>
<!-- 应用自定义拦截器 -->
<interceptor-ref name="authority"/>
</action>

上面名为viewBook的Action,没有指定class属性,默认使用ActionSupport类,配置该Action时,只是指定了一个Result,指定返回success字符串时,系统将转入/WEB-INF/jsp/viewBook.jsp页面。但并为未配置login视图对应的JSP页面。
考虑到这个拦截器的重复使用,可能在多个Action都需要跳转到login逻辑试图,故将login Result定义成一个全局Result。下面是配置login Result的配置片段:
<!-- 定义全局Result -->
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>

经过上面的配置,如果浏览者在浏览器中直接发送viewBook请求,将会转入如图所示的页面。
这种通过拦截器进行权限控制的方式,显然具有更好的代码复用。
如果为了简化struts.xml文件的配置,避免在每个Action中重复配置该拦截器,可以将该拦截器配置成一个默认拦截器栈(这个默认拦截器栈应该包括default-stack拦截器栈和权限检查拦截器)。
定义自己的默认拦截器栈的配置片段如下:
<interceptors>
<!-- 定义权限检查拦截器 -->
<interceptor name="authority" class="lee.AuthorityInterceptor"/>
<!-- 定义一个包含权限检查的拦截器栈 -->
<interceptor-stack name="mydefault">
<!-- 定义拦截器栈包含default-stack拦截器栈 -->
<interceptor-ref name="default-stack"/>
<!-- 定义拦截器栈包含authority拦截器 -->
<interceptor-ref name=" authority"/>
</interceptor- stack >
</interceptors>

一旦定义了上面的mydefault拦截器栈,这个拦截器栈包含了权限检查拦截器和系统默认的拦截器栈。如果将这个拦截器栈定义成默认拦截器,则可以避免在每个Action需要重复定义权限检查拦截器。
下面是定义默认拦截器的配置片段:
<default-interceptor-ref name="mydefault"/>
一旦在某个包下定义了上面的默认拦截器栈,在该包下的所有Action都会自动增加权限检查功能。对于那些不需要使用权限控制的Action,将它们定义在另外的包中——这个包中依然使用系统原来的默认拦截器栈,将不会有权限控制功能。
分享到:
评论

相关推荐

    Struts2拦截器实现权限控制demo

    1. 创建权限拦截器:首先,我们需要编写一个实现了`Interceptor`接口的类,例如`AuthorizationInterceptor`。在这个类中,我们可以检查用户的登录状态、角色等信息,以确定他们是否有权限执行请求的操作。 2. 注册...

    struts2拦截器实现权限控制

    在`struts.xml`中,可以创建一个或多个拦截器栈,并将权限拦截器包含在内。 4. 应用拦截器:在Action配置中,通过`&lt;interceptor-ref&gt;`标签引用拦截器栈,确保在执行Action之前会经过权限拦截器的验证。 此外,还...

    Struts2权限控制

    "基于Struts2拦截器的权限控制.doc"文档很可能是提供了一个具体的案例,详细讲解了如何创建并使用拦截器进行权限控制。文档可能会涵盖以下内容: 1. 创建自定义拦截器类,实现`Interceptor`接口,重写`intercept()`...

    struts2 用拦截器 实现用户权限登录

    Struts2是一个强大的Java web应用程序框架,它提供了一种组织和控制MVC(Model-...通过这种方式,Struts2的拦截器为我们提供了灵活的权限控制机制,使得我们能够轻松地管理和维护用户的登录状态,保证了应用的安全性。

    使用struts2拦截器对登陆权限验证

    在Struts2中,拦截器(Interceptor)扮演着至关重要的角色,它允许开发者在动作执行前后插入自定义逻辑,如日志记录、权限验证等。在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合...

    Struts2 配置登陆拦截器

    在Struts2中,拦截器是实现业务逻辑控制和处理流程的重要组件,它们可以添加额外的功能,如日志记录、权限检查、事务管理等,而不干扰实际的业务操作。本篇文章将详细介绍如何配置Struts2的登录拦截器,以及其背后的...

    struts2.X 拦截器源码

    在Struts2中,拦截器扮演着中间件的角色,它在Action执行前后进行处理,可以进行如日志记录、权限检查、数据验证等操作,极大地提高了代码的复用性和可维护性。 首先,我们需要理解拦截器的工作原理。在Struts2框架...

    一个Struts2的核心拦截器例子

    核心拦截器是Struts2框架的重要组成部分,它们允许开发者在动作执行前后插入自定义逻辑,以实现如日志、权限验证、数据校验等常见功能。下面将详细讲解Struts2的核心拦截器以及如何在项目中使用它们。 1. **Struts2...

    Struts2学习案例(拦截器)

    在Struts2中,拦截器是基于Java的动态AOP(面向切面编程)实现的,它可以在Action调用前后插入额外的逻辑,比如日志记录、权限验证、事务管理等。拦截器通过配置文件或者注解与Action关联,形成一个拦截器栈,每个...

    Struts2拦截器及其用法详细说明

    在Struts2中,拦截器(Interceptors)扮演着核心角色,增强了框架的功能和灵活性。这篇文章将深入探讨Struts2拦截器的概念、工作原理以及如何在实际应用中使用它们。 **一、什么是Struts2拦截器** 拦截器是基于AOP...

    struts2 拦截器

    2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action执行,那么Action的结果将被传递到下一个拦截器,直到整个链执行完毕。 ### 二、...

    struts2拦截器

    描述中提到的“基于struts2的拦截器测试,实现了页面的跳转,中间过程的拦截”,这表明我们可能在创建一个测试场景,来验证拦截器如何控制请求的流向以及如何在特定的业务逻辑点进行干预。页面跳转通常是拦截器完成...

    创建自己struts2拦截器

    Struts2是一个强大的MVC框架,它通过使用拦截器(Interceptor)来实现业务逻辑与表现层的解耦,提供了一种灵活的扩展机制。在Struts2中,拦截器是AOP(面向切面编程)的一种实现,它可以监控、修改或增强方法调用的...

    struts2 拦截器实例

    在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在Action执行前后插入自定义的逻辑,如日志、权限检查、事务管理等。现在我们将深入探讨Struts2的拦截器机制及其实例应用。 ### 一、Struts2拦截...

    struts2学习笔记十(第10讲.Struts2的核心 拦截器)

    在Struts2中,拦截器扮演着至关重要的角色,它们是实现业务逻辑和控制流程分离开来的重要组件。本篇将深入探讨Struts2的核心拦截器以及其工作原理。 在Struts2中,拦截器是一个实现了`Interceptor`接口的类,它通过...

    Struts2拦截器源码

    例如,你可以创建一个新的拦截器来实现登录检查、权限控制或性能监控,然后将其添加到拦截器栈中。通过理解和研究Struts2的拦截器源码,我们可以更好地利用这个强大工具,提高应用的可扩展性和灵活性。同时,这也为...

    运用struts2技术的拦截器实现的页面检测和用户注册

    通过上述方式,我们可以利用Struts2的拦截器机制有效地实现页面访问控制和用户注册功能,同时保持代码的清晰和模块化。在实际开发中,还可以结合其他拦截器,如性能监控、日志记录、事务管理等,进一步增强应用的...

    Struts2 拦截器

    拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...

    Struts2拦截器源程序

    总结来说,Struts2拦截器是框架的核心部分,它们提供了一种灵活的方式,以实现各种功能,如日志记录、性能监控、权限控制等,同时保持代码的整洁和模块化。通过对`98struts201`文件的深入研究,我们可以更好地掌握...

    struts2拦截器应用小例子

    在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在动作执行前后插入自定义的逻辑,如日志、权限检查、数据验证等。本示例将探讨如何在Struts2中使用拦截器。 首先,我们需要理解Struts2拦截器的...

Global site tag (gtag.js) - Google Analytics