有时候我需要在几个包下都需要进行同一个权限控制。如在购物网站中,我们需要进入个人中心、下订单、评价商品等等都需要进行登录权限控制,但是这几个模块并不是位于同一个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. WebView加载HTML图片大小自适应与文章自动换行

    http://www.brighttj.com/ios/ios-webview-load-html-image-adaptive.html 在很多App中都会使用到webview,尤其是在加载新闻内容 ...

  2. spring mvc 工作流程

    Spring Web MVC 处理Http请求的大致过程:一旦Http请求到来,DispatcherSevlet将负责将请求分发.DispatcherServlet可以认为是Spring提供的前端控制 ...

  3. [转载]centos安装svn服务器

    一.安装Subversion #yum install subversion   1.查看安装时的文件产生情况,使用 rpm -ql subversion 2.卸载subversion:#yum re ...

  4. C# 获取屏幕的大小

    原文地址:http://www.cnblogs.com/zp89850/archive/2011/08/23/2151052.html C# 获取屏幕的大小 WinForm: int iActulaW ...

  5. css js 的引入方式和书写位置

    css 的引入方式 1.行内样式 <div id="div1" style="width:100px; height:100px; background:red&q ...

  6. JS获得URL超链接的参数值

    /** * 获取指定URL的参数值 * @param url  指定的URL地址 * @param name 参数名称 * @return 参数值 */ function getUrlParam(ur ...

  7. Dancing Links & Algorithm X

    1 参考链接 http://www.cnblogs.com/steady/archive/2011/03/15/1984791.html#undefined http://en.wikipedia.o ...

  8. CSS有三种基本的定位机制

    CSS有三种基本的定位机制:普通流,浮动和绝对定位. 普通流:在普通流中元素框的位置由元素在html中的位置决定, 1.元素position属性为static或继承来的static时就会按照普通流定位 ...

  9. ubuntu 下安装boost库

    ubuntu下安装boost库,,在网上试了一些其他人推荐的libboost-dev 但是会缺少,编译程序会报错: /usr/bin/ld: cannot find -lboost_serializa ...

  10. Mysql --分区表的管理与维护

    改变一个表的分区方案只需使用alter table 加 partition_options 子句就可以了.和创建分区表时的create table语句很像 创建表 CREATE TABLE trb3 ...