有时候我需要在几个包下都需要进行同一个权限控制。如在购物网站中,我们需要进入个人中心、下订单、评价商品等等都需要进行登录权限控制,但是这几个模块并不是位于同一个package下。Struts提供的拦截器,我们可以实现action下拦截,我们虽然可以在每一个package都配置这个拦截器,但是是相当的麻烦。这个时候我们可以利用拦截器实现拦击package。将需要进行权限控制package放入拦截器中就可以实现了。

首先我们需要在struts.xml下进行拦截器的配置。

 <package name="main" extends="struts-default">
<interceptors>
<interceptor name="authorizationInterceptor" class="syxh.common.aop.SystemInterceptor"></interceptor>
<interceptor-stack name="jwzhptStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="authorizationInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors> <default-interceptor-ref name="jwzhptStack" /> <global-results>
<result name="loginfailure" type="redirectAction">
<param name="namespace">/index</param>
<param name="actionName">index</param>
</result>
</global-results> <global-exception-mappings>
<exception-mapping result="input" exception="*">/login.jsp</exception-mapping>
</global-exception-mappings>
</package>

上面配置的main ,所以的package都要继承main,即:extends=”main”,否则实现不了。

在struts.xml中,使用了拦截器栈,里面包含两个拦截器,一个是默认的defaultStack,一个是进行权限控制的authorizationInterceptor。

拦截器实现类:SystemInterceptor.java

 public class SystemInterceptor extends AbstractInterceptor{

     private static final long serialVersionUID = -1819593755738908387L;
private static final String WITHOUT = "/index, /author, /common, /indexzp"; //不需要进行权限控制的namespace public void destroy(){
} public void init(){
} public String intercept(ActionInvocation invocation) throws Exception{
String namespace = invocation.getProxy().getNamespace(); //获取namespace
if (WITHOUT.indexOf(namespace) >= 0){
return invocation.invoke();
} Map<?, ?> session = invocation.getInvocationContext().getSession();
UserBean user = (UserBean) session.get("currentUser");
if (user == null){ //没有登录
return "loginfailure";
}
return invocation.invoke(); //已登录
}
}

上面的拦截器实现类,指定了几个namespace是不需要进行权限控制的,除此之外其他的namespace都要进行

权限控制。

其他package只需要继承main既可实现权限控制。

 <package name="user" namespace="/user" extends="main">
<action name="userCenter_*" class="syxh.grzx.action.UserCenterAction" method="{1}">
<result name="updatePasswordUI">/jsp/grzx/updatePassword.jsp</result>
<result name="updateError">/jsp/grzx/updatePassword.jsp</result>
<result name="updateSuccess" type="redirect">/zp/myWorksHome.action</result>
<result name="updatePhoteUI">/jsp/grzx/updatePhoto.jsp</result>
<result name="updateInfoUI">/jsp/grzx/updateInfo.jsp</result>
</action>
</package>

注:由于这个拦截器主要是根据namespace来进行控制的,所以在配置package,要添加namespace。

使用Struts 拦截namespace进行权限控制的更多相关文章

  1. Struts2基础-4-2 -struts拦截器实现权限控制案例+ 模型驱动处理请求参数 + Action方法动态调用

    1.新建项目,添加jar包到WEB-INF目录下的lib文件夹,并添加到builde path里面 整体目录结构如下 2.新建web.xml,添加struts2核心过滤器,和默认首页 <?xml ...

  2. Struts2使用拦截器完成权限控制示例

    http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求:    要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...

  3. struts自己定义拦截器--登录权限控制

    说明:该自己定义的拦截器实现用户登录的权限控制. login.jsp--->LoginAction--重定向-->MainAction--->main.jsp 一.1.整体的步骤: ...

  4. 6、Struts2拦截器实现权限控制

    1.创建如下项目结果 2.在com.entity包下创建 package com.entity; public class User { private String name; private St ...

  5. 在struts2.3.4.1中使用注解、反射、拦截器实现基于方法的权限控制

    权限控制是每一个系统都应该有的一个功能,有些只需要简单控制一下就可以了,然而有些却需要进行更加深入和细致的权限控制,尤其是对于一些MIS类系统,基于方法的权限控制就更加重要了. 用反射和自定义注解来实 ...

  6. struts2拦截器加自定义注解实现权限控制

    https://blog.csdn.net/paul342/article/details/51436565 今天结合Java的Annotation和Struts2进行注解拦截器权限控制. 功能需求: ...

  7. 转Struts 权限控制

    权限最核心的是业务逻辑,具体用什么技术来实现就简单得多. 通常:用户与角色建立多对多关系,角色与业务模块构成多对多关系,权限管理在后者关系中. 对权限的拦截,如果系统请求量大,可以用Struts2拦截 ...

  8. ASP.NET Core利用拦截器 IActionFilter实现权限控制

    “麦荻网教系统”采用了前后端代码分离的架构,即“Miidy.Cloud.Console”站与“Miidy.Cloud.Manage”站(两个前端站)同时通过web api的方式调用“Miidy.Clo ...

  9. 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示

    1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...

随机推荐

  1. B-Tree 学习

    算法导论 第18章 B树与其他树的结构不同的是  B数是多叉而不是二叉树 而且分叉因子很大一般使用于数据库 针对需要硬盘IO的情况而使用 可以降低磁盘IOB树的一个节点是以磁盘的页面为单位,而不是数据 ...

  2. 解决Visual Studio 2010闪退问题

    许多人都会面临这样的问题,vs2010闪退,明明程序执行成功,明明没有错误,缺闪了一下结束. 闪退问题主要是缓存的问题,通过在程序末尾,即main函数后增加 getchar(); getchar(); ...

  3. 新版Xcode无法新建iOS空项目解决方案

    --感谢同学分享-- 操作说明: 拷贝Empty Application.xctemplate文件夹至   /Contents/Developer/Platforms/iPhoneOS.platfor ...

  4. TCP/IP入门(3) --传输层

    原文:http://blog.csdn.net/zjf280441589/article/category/1854365 传输层的主要功能 1)传输层为应用进程之间提供端到端的逻辑通信(网络层是为主 ...

  5. MVC文件上传和下载

    1.单个文件上传 HTML写法:form表单中加enctype="multipart/form-data" <form aciont="" method= ...

  6. Qt Qwt之坐标轴移动

    最近接触到个pro需要做到这方面,于是找了相关材料,也跟好些人讨论,目前就最简单的使用方法,通过按钮触发去控制 X,Y轴的移动,比例自己定义 这个是X轴放大的 QwtInterval tempInte ...

  7. 2.Nginx优化

    [教程主题]:Nginx优化 [课程录制]: 创E [主要内容] Nginx 优化 nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为"engine ...

  8. hdu 1312(DFS)

    Red and Black Tme Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  9. java线程小结3

    1. 多线程概述 要实现多线程可以通过继承Thread和实现Runnable接口.不过这两者之间存在一些区别.其中最重要的区别就是,如果一个类继承Thread类,则不适合于多个线程共享资源,而实现了R ...

  10. java中枚举(enum)小例子。之前学过枚举但是一直没用,这里有个枚举类帮你我理解下(很肤浅)

    直接上枚举类,代码简单易懂. package com.jy.modules.cims.data.interact.tbj.loan.request; /** * * @author shengzhou ...