使用Struts 拦截namespace进行权限控制
有时候我需要在几个包下都需要进行同一个权限控制。如在购物网站中,我们需要进入个人中心、下订单、评价商品等等都需要进行登录权限控制,但是这几个模块并不是位于同一个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进行权限控制的更多相关文章
- Struts2基础-4-2 -struts拦截器实现权限控制案例+ 模型驱动处理请求参数 + Action方法动态调用
1.新建项目,添加jar包到WEB-INF目录下的lib文件夹,并添加到builde path里面 整体目录结构如下 2.新建web.xml,添加struts2核心过滤器,和默认首页 <?xml ...
- Struts2使用拦截器完成权限控制示例
http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求: 要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...
- struts自己定义拦截器--登录权限控制
说明:该自己定义的拦截器实现用户登录的权限控制. login.jsp--->LoginAction--重定向-->MainAction--->main.jsp 一.1.整体的步骤: ...
- 6、Struts2拦截器实现权限控制
1.创建如下项目结果 2.在com.entity包下创建 package com.entity; public class User { private String name; private St ...
- 在struts2.3.4.1中使用注解、反射、拦截器实现基于方法的权限控制
权限控制是每一个系统都应该有的一个功能,有些只需要简单控制一下就可以了,然而有些却需要进行更加深入和细致的权限控制,尤其是对于一些MIS类系统,基于方法的权限控制就更加重要了. 用反射和自定义注解来实 ...
- struts2拦截器加自定义注解实现权限控制
https://blog.csdn.net/paul342/article/details/51436565 今天结合Java的Annotation和Struts2进行注解拦截器权限控制. 功能需求: ...
- 转Struts 权限控制
权限最核心的是业务逻辑,具体用什么技术来实现就简单得多. 通常:用户与角色建立多对多关系,角色与业务模块构成多对多关系,权限管理在后者关系中. 对权限的拦截,如果系统请求量大,可以用Struts2拦截 ...
- ASP.NET Core利用拦截器 IActionFilter实现权限控制
“麦荻网教系统”采用了前后端代码分离的架构,即“Miidy.Cloud.Console”站与“Miidy.Cloud.Manage”站(两个前端站)同时通过web api的方式调用“Miidy.Clo ...
- 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示
1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...
随机推荐
- asp.net大文件上传与上传文件进度条问题
利用Plupload解决大容量文件上传问题, 带进度条和背景遮罩层 关于Plupload结合上传插件jquery.plupload.queue的使用 这是群里面一位朋友给的资料. 下面是自己搜索到的一 ...
- 实战录 | 一起唠唠那些常见的DDoS攻击
<实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士系统架构师高鹏,将带来常见的DDo ...
- git conifg
1. git config简介 我们知道config是配置的意思,那么git config命令就是对git进行一些配置.而配置一般都是写在配置文件里面,那么git的配置文件在哪里呢?互动一下,先问下大 ...
- prism4 StockTrader RI 项目分析一些体会2
prism 对于逻辑复杂的页面,通过建立 controller实现逻辑管理 按着一般的做法就是,各模块的viewmodel import由各模块去实例化(理解有限),但是通过controller实现了 ...
- 图片预加载和AJAX的图片预加载
利用js实现图片预加载,加载所需要图片的路径与名称即可,很容易实现,该方法尤其适用预加载大量的图片: <div class="hidden"> <script t ...
- LoopBackJS 之 文件上传下载——使用loopback-component-storage
参考链接: http://loopback.io/doc/en/lb2/Storage-component.html#creating-a-storage-component-data-source ...
- smarty模板中获得循环次数
在smarty中可以有两种写法来获得循环次数(当然lz只会这两种:>,要是有大神会有其他的,欢迎补充) 写法一: {section name=loop loop=3} {$smarty.loop ...
- IOS学习笔记 O2
第二章 Objective-C语言基础进阶 一.Objective-C语言写法简化 利用@property快速生成setget方法 1.首先来复习一下setget写法,这是上一节笔记写的setget方 ...
- awk用法总结笔记
+ : 匹配1或多次出现的字符或正则表达式 awk '/col+/' testfile ? : 匹配0或1次出现的字符或正则表达式 awk '/col+/' testfile | : 匹 ...
- Linux 常用工具小结:(5) lftp工具使用
Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...