Struts2 interceptor使用经验小结
1. interceptor 调用Spring容器中的bean
在interceptor中常有需要调用Spring Bean的需要,其实很简单和Struts2的Action一样配置即可.
Spring中的配置
<!--spring配置 -->
1 <bean id="authorityInterceptor" class="com.xxx.interceptor.AuthorityInterceptor"/> <bean id="operationInterceptor" class="com.xxx.interceptor.OperationInterceptor">
<property name="defectService" ref="sysDefectService"/>
<property name="projectService" ref="projectService" />
<property name="includeMethods">
<value>*Modify,*Delete</value>
</property>
</bean>
Struts2中的配置
<interceptors>
<interceptor name="loginInterceptor" class="authorityInterceptor"/>
<interceptor name="operationInterceptor" class="operationInterceptor"/>
</interceptors>
2. 如何获得当前Action名字
public String intercept(ActionInvocation aInvocation) throws Exception {
// 获取请求的action名称
String actionName = aInvocation.getInvocationContext().getName();
//获取参数集合
Map parameters = aInvocation.getInvocationContext().getParameters();
....
}
3. 方法拦截器黑白名单可以使用通配符
拦截器代码:
package xx.interceptor;
import xx.action.ProjectAction;
import xx.action.SysDefectAction;
import xx.po.Project;
import xx.po.SysDefect;
import xx.po.User;
import xx.service.IProjectService;
import xx.service.ISysDefectService;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import java.util.List; public class OperationInterceptor extends MethodFilterInterceptor {
private ISysDefectService defectService;
private IProjectService projectService; protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
boolean hasAuth = false;
String cunrrentId = "";
Object currentActon =actionInvocation.getAction();
ActionContext actionContext = actionInvocation.getInvocationContext();
User currentUser = (User)actionContext.getSession().get("currentUser");
if(currentUser == null
|| currentUser.getEmployer()==null
|| currentUser.getGroup() == null
|| currentUser.getEmployer().getEmpId()+""==null
)
{
return Action.LOGIN;
}
//获取当前用户的epmId
String empId = currentUser.getEmployer().getEmpId() + ""; if(currentActon instanceof ProjectAction){
//是否第二次检查权限
List<Project> projectList = currentUser.getProjectList();
if (projectList==null || projectList.size()<1){
ProjectAction projectAction = (ProjectAction)currentActon;
cunrrentId = projectAction.getProjId();
projectList = projectService.getProjectsByEmpId(empId);
} //如果获取列表失败,则提示无权限
if(projectList==null || projectList.size()<1){
return "deny";
}else {
currentUser.setProjectList(projectList);
}
for(Project project:projectList){
if(cunrrentId.equals(project.getProjId()+"")){
hasAuth = true;
}
}
if(hasAuth){
return actionInvocation.invoke();
} }else if(currentActon instanceof SysDefectAction){
SysDefectAction sysDefectAction = (SysDefectAction)currentActon;
List<SysDefect> sysDefectList = defectService.getSysDefectsByEmpId(empId);
if(sysDefectList==null || sysDefectList.size()<1){
return "deny";
}else {
currentUser.setSysDefectList(sysDefectList);
}
for(SysDefect sysDefect:sysDefectList){
if(cunrrentId.equals(sysDefect.getDefId()+"")){
hasAuth = true;
}
}
if(hasAuth){
return actionInvocation.invoke();
}
}
return "deny"; //To change body of implemented methods use File | Settings | File Templates.
} public ISysDefectService getDefectService() {
return defectService;
} public void setDefectService(ISysDefectService defectService) {
this.defectService = defectService;
} public IProjectService getProjectService() {
return projectService;
} public void setProjectService(IProjectService projectService) {
this.projectService = projectService;
}
}
Spring配置:
<bean id="authorityInterceptor" class="xx.interceptor.AuthorityInterceptor"/> <bean id="operationInterceptor" class="xx.interceptor.OperationInterceptor">
<property name="defectService" ref="sysDefectService"/>
<property name="projectService" ref="projectService" />
<!-- 白名单属性配置,注意*的用法 -->
<property name="includeMethods">
<value>*Modify,*Delete</value>
</property>
</bean>
struts2配置:
<interceptors>
<interceptor name="loginInterceptor" class="authorityInterceptor"/>
<interceptor name="operationInterceptor" class="operationInterceptor"/> <interceptor-stack name="authInterceptor-stack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="loginInterceptor"/>
<interceptor-ref name="operationInterceptor"/> </interceptor-stack> </interceptors>
Struts2 interceptor使用经验小结的更多相关文章
- Struts2 Interceptor学习
Interceptor的设计思想,其实是Spring里面的AOP思想,尽管Struts2又有自己的Interceptor但是,在实际开发中,用的较少,SSH整合之后你可以采用AOP事务处理进行拦截,更 ...
- Struts2 - Interceptor中取得ActionName、Namespace、Method
在Struts2的Interceptor中取得当前执行对应的ActionName.Namespace.Method方法: 可以使用: System.out.println(invocation.get ...
- Struts2命令空间小结
sturts2命名空间小结,以tomcat为服务器 1. 命名空间配置为“/” <package name="default" namespace="/" ...
- 【心得】Lattice后端使用经验小结(ECP5UM,DDR3,Diamond3.10,Reveal逻辑分析)
[博客导航] [导航]FPGA相关 背景 下边的内容,适合初次使用Lattice的.具备FPGA开发经验的同学. 1.初次使用,还真遇到不少的坑,Lattice的工具也有不少优缺点,通过总结,希望能缩 ...
- Struts2(七)基础小结
一.struts2和action 二.Result 三.struts.xml 四.namespace 第一种绝对路径 <form action="${pageContext.reque ...
- Git使用经验小结
2012春,开始正式使用SVN,2014年9月加入一起好后,开始使用Git. 有了一些使用经验,也看了下网上关于"Git全胜SVN"的言论. 结合自己的实际情况,简要写几句: 1 ...
- mybatis 使用经验小结
一.多数据源问题 主要思路是把dataSource.sqlSesstionFactory.MapperScannerConfigurer在配置中区分开,各Mapper对应的包名.类名区分开 <? ...
- jmeter linux使用经验小结
1. 确认务必安装了JDK,并且把路径配置OK.否则执行会报错. 2. 当做负载机时,在hosts 配置上 你的ip 你的hostname 或者使用./bin/jmeter-server ...
- DEV_TreeList使用经验小结
1. 点击叶子节点是希望Open键显示,点击非叶子节点时希望隐藏.实践中发现点击到了非叶子节点图标,Open没有隐藏,如何解决? 增加一个判断: if (_hitInfo.HitInfoType != ...
随机推荐
- C# string类型遇到的两个问题
最近在维护一位离职的同事写的WPF代码,偶然发现他使用C# string类型的两个问题,在这里记录一下. 1. 使用Trim函数移除字串中的空格.换行符等字符串. csRet.Trim(new cha ...
- java多线程总结三:sleep()、join()、interrupt()示例
这是一个来自<java编程思想上的示例> package demo.thread; /** *sleep()是静态方法,是属于类的,作用是让当前线程阻塞 *join()是使线程同步,如在某 ...
- YYKit之YYModel
原文:http://www.cnblogs.com/lujianwenance/p/5706548.html 本文主要是对YYModel文件结构的简单分析,能帮助你更快的熟悉和学习YYModel ...
- HTTP 和 Socket 的区别
要弄明白 http 和 socket 首先要熟悉网络七层:物 数 网 传 会 表 应,如图1 如图1 HTTP 协议:超文本传输协议,对应于应用层,用于如何封装数据. TCP/UDP 协议:传输控制协 ...
- JavaScript基础-面向对象编程<2>
2.动态添加,修改和删除对象属性和方法 例如:用类Object()创建一个空对象user,然后修改其行为. (1) 添加属性 var user=new Object(); //创建一个没有属性和方法的 ...
- 从客户端中检测到有潜在危险的 Request.Form 值] 处理办法
当asp.net提交<>这些字符到aspx页面时,如果未设置 validaterequest="false",就会出现错误:从客户端(<?xml version= ...
- BYTE、WORD与DWORD类型
Original Link: http://hi.baidu.com/vnxuaqndtncrxyr/item/f67c83872cf80cd65e0ec10d Author: 厚积薄发 在Visu ...
- Config spec rules for elements in subbranches
Quote from: Config spec rules for elements in subbranches The following is an example of a config s ...
- mysql中的sql时间格式转换
from_unixtime(unix_timestamp, format) 把时间戳转化为指定的格式 as: select from_unixtime(addTime, '%Y-%m-%d %h:%i ...
- memcached全面剖析--5
memcached的应用和兼容程序 mixi案例研究 mixi在提供服务的初期阶段就使用了memcached. 随着网站访问量的急剧增加,单纯为数据库添加slave已无法满足需要,因此引入了memca ...