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使用经验小结的更多相关文章

  1. Struts2 Interceptor学习

    Interceptor的设计思想,其实是Spring里面的AOP思想,尽管Struts2又有自己的Interceptor但是,在实际开发中,用的较少,SSH整合之后你可以采用AOP事务处理进行拦截,更 ...

  2. Struts2 - Interceptor中取得ActionName、Namespace、Method

    在Struts2的Interceptor中取得当前执行对应的ActionName.Namespace.Method方法: 可以使用: System.out.println(invocation.get ...

  3. Struts2命令空间小结

    sturts2命名空间小结,以tomcat为服务器 1. 命名空间配置为“/” <package name="default" namespace="/" ...

  4. 【心得】Lattice后端使用经验小结(ECP5UM,DDR3,Diamond3.10,Reveal逻辑分析)

    [博客导航] [导航]FPGA相关 背景 下边的内容,适合初次使用Lattice的.具备FPGA开发经验的同学. 1.初次使用,还真遇到不少的坑,Lattice的工具也有不少优缺点,通过总结,希望能缩 ...

  5. Struts2(七)基础小结

    一.struts2和action 二.Result 三.struts.xml 四.namespace 第一种绝对路径 <form action="${pageContext.reque ...

  6. Git使用经验小结

    2012春,开始正式使用SVN,2014年9月加入一起好后,开始使用Git.  有了一些使用经验,也看了下网上关于"Git全胜SVN"的言论. 结合自己的实际情况,简要写几句: 1 ...

  7. mybatis 使用经验小结

    一.多数据源问题 主要思路是把dataSource.sqlSesstionFactory.MapperScannerConfigurer在配置中区分开,各Mapper对应的包名.类名区分开 <? ...

  8. jmeter linux使用经验小结

    1. 确认务必安装了JDK,并且把路径配置OK.否则执行会报错. 2. 当做负载机时,在hosts 配置上    你的ip   你的hostname  或者使用./bin/jmeter-server ...

  9. DEV_TreeList使用经验小结

    1. 点击叶子节点是希望Open键显示,点击非叶子节点时希望隐藏.实践中发现点击到了非叶子节点图标,Open没有隐藏,如何解决? 增加一个判断: if (_hitInfo.HitInfoType != ...

随机推荐

  1. redhat ping不通外网的解决办法

    ping自己和网关都能ping通就是无法ping通外网例如百度: [root@ocdp1 ~]# ping www.baidu.com ping: unknown host www.baidu.com ...

  2. 缓存(之一) 使用Apache Httpd实现http缓存

    http://www.tuicool.com/articles/EFfeu2 HTTP性能的问题与方案 一个最终用户访问一个网页,从浏览器发出请求,到接受请求,时间大体上消耗在了以下几个部分: 建立t ...

  3. 偶尔会用到的有用的CMD命令

    1.解压CHM cd /d (如果你的chm文档在系统盘的话,就没有必要写这个/d) [你的chm文档的路径名] 回车 hh -decompile [源文件的保存路径] [要反编译的chm格式电子书] ...

  4. 一种c#深拷贝方式完胜java深拷贝(实现上的对比)

    楼主是一名asp.net攻城狮,最近经常跑java组客串帮忙开发,所以最近对java的一些基础知识特别上心.却遇到需要将一个对象深拷贝出来做其他事情,而原对象保持原有状态的情况.(实在是不想自己new ...

  5. C语言中的%0nd,%nd,%-nd

    C语言中的%0nd printf --> formatted print/格式化输出 一.十进制 d -> decimal/十(shí)进制 int a=1; int b=1234; do ...

  6. jQuery实例-简单选项卡-【一些常见方法(2)-练习】

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Missra开源前端框架

    Missra开源前端框架,官方网址:http://framework.missra.com

  8. Cassandra1.2文档学习(8)—— 数据管理

    数据参考:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_manage ...

  9. PHP学习心得(一)——简介

    PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发. PHP 脚 ...

  10. 在Intellij IDEA或者PhpStorm下用X-debug调试PHP

    用Intellij IDEA或者PhpStorm使用X-debug来调试PHP,主要需要配置的部分有三个地方,分别为php.ini的配置,IDEA的配置和浏览器的配置,主要如下,以备忘: php.in ...