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

struts2使用拦截器进行粗粒度的权限管理

阅读更多
使用拦截器进行粗粒度的权限管理


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拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...

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

    除了Struts2拦截器,我们还可以使用Servlet Filter进行权限验证。Filter是在HTTP请求进入Servlet之前运行的组件,它可以用于处理各种请求和响应过滤,包括登录验证。通常,我们在`web.xml`中配置Filter: ```xml ...

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

    这篇文章将深入探讨Struts2拦截器的概念、工作原理以及如何在实际应用中使用它们。 **一、什么是Struts2拦截器** 拦截器是基于AOP(面向切面编程)思想的组件,它可以理解为在Action调用前后插入的逻辑处理。在...

    struts2拦截器实现权限控制

    3. 配置拦截器栈:Struts2使用拦截器栈的概念,即将多个拦截器组织成一个栈,按照栈的顺序依次执行。在`struts.xml`中,可以创建一个或多个拦截器栈,并将权限拦截器包含在内。 4. 应用拦截器:在Action配置中,...

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

    本教程将详细介绍如何使用Struts2的拦截器来实现用户权限登录功能。 ### 一、拦截器的原理与作用 1. **原理**:拦截器工作在Action调用之前,它通过观察者模式实现,当一个请求到达时,会按照配置的顺序依次执行...

    struts2 拦截器

    3. **权限验证**:拦截器可以实现用户登录检查,防止未授权的访问。 4. **数据校验**:在Action执行前,拦截器可以对输入数据进行校验,确保数据的合法性。 5. **业务逻辑增强**:如事务管理,可以在拦截器中进行...

    Struts2拦截器(Interceptor)

    Struts2拦截器(Interceptor) Struts2拦截器(Interceptor)

    struts2实现拦截器、

    本文将深入探讨如何使用Struts2实现拦截器,以及如何配置拦截器来实现用户权限拦截。 首先,我们需要了解拦截器的工作原理。在Struts2中,拦截器是基于Java的动态代理机制实现的,它们按照预定义的顺序形成一个拦截...

    Struts2拦截器源码

    Struts2中的拦截器可以通过XML配置文件或注解进行声明。例如,`struts-default.xml`中包含了默认的拦截器栈,如`params`拦截器用于处理请求参数,`exception`拦截器用于处理异常,`validation`拦截器进行数据校验。 ...

    Struts2学习案例(拦截器)

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

    struts2拦截器

    这暗示了我们可能在测试中使用拦截器来处理数据库相关的逻辑,比如在执行SQL查询前进行事务管理,或者在查询后进行结果的处理和转换。 总的来说,Struts2拦截器为开发者提供了强大的工具,使他们能够优雅地扩展应用...

    struts2 拦截器实例

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

    struts2中拦截器的使用

    拦截器是Struts2框架的核心组件之一,它们在Action调用前后执行,提供了诸如日志记录、权限验证、数据校验等额外功能,极大地提高了代码的可复用性和可维护性。 在Struts2中,拦截器的使用主要基于两个方面:配置...

    Struts2编码拦截器

    解决Struts2中的中文乱码。该代码是用作Struts2的拦截器中

    Struts2的拦截器的使用详解

    在Struts2框架中,拦截器扮演着关键角色,它们提供了AOP(面向切面编程)的功能,使得开发者可以在不修改业务逻辑的情况下,对请求处理流程进行增强。本文将深入探讨Struts2的拦截器使用,结合实例和源码分析,帮助...

    详解Struts2拦截器

    在Struts2框架中,拦截器主要用于对Action执行前后的过程进行干预,以便执行一些通用的功能,如验证用户输入、记录日志、事务管理等。 - **拦截器的核心功能**:Struts2拦截器可以动态地拦截发送到指定Action的请求...

    struts2拦截器的使用方法

    ### Struts2拦截器的使用方法 #### 一、Struts2拦截器概述 Struts2框架中的拦截器(Interceptor)是一种重要的机制,用于在Action执行前后进行一系列处理,比如参数验证、数据预处理等。它能够帮助开发者更加灵活...

    Struts2 拦截器

    在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的基本概念。拦截器是在Action调用之前和之后执行的一段代码,可以用来做日志记录、权限检查...

    struts2拦截器应用小例子

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

    struts2常用拦截器

    struts2常用拦截器,struts2经常用到的拦截器,熟悉熟悉

Global site tag (gtag.js) - Google Analytics