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 != ...
随机推荐
- 通过样式调整input 中password text默认长度
原文出处 <input >标签内的type分别为password和text时其默认长度和宽度不一致,而在做登陆框时往往需要将它们的长度和宽度设置一致.如下的方法可以通过css控制使其一致: ...
- oracle数据库不支持mysql中limit功能
oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结果集的行数,rownum并不是用户添加的字段,而是oracle系统自动添加的. (1)使查询结果最多返回前10行 ...
- EasyUIDataGrid 的List<T>转Json
EasyUI的DataGrid的Json自己拼接的话非常麻烦,而且容易出错,于是写了个通用的方法! CustomList<T>自定义类,继承于List<T>,用来处理返回的实体 ...
- 关于ServletConfig的小结
在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数.当servlet配置了初始化参数后,web容器在创建servlet ...
- IIS7 发现无法显示ewebeditor编辑器成空白
vs2003写的网站,很早了,编辑器用的是ewebeditor,每次更换程序编辑器都会出问题.今天记录一下. 内部老网站在Windows2003 iis6上运行的. 现在要迁移到2008上64位.08 ...
- Headfirst设计模式的C++实现——迭代器(Iterator)改良版
iterator.h #ifndef _ITERATOR_H_ #define _ITERATOR_H_ class Iterator { public: ; ; }; #endif menu.h # ...
- hdu 4850 Wow! Such String! 欧拉回路
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4080264.html 题目链接:hdu 4850 Wow! Such String! 欧拉回 ...
- new static() 和 new self() 的区别异同
长夜漫漫啊! 今天领导本地搭建一个站.发现用PHP 5.2 搭建不起来,站PHP代码里面有很多5.3以上的部分,领导让苦逼我更改在5.2下能运行. 改着改着发现了一个地方 return new sta ...
- csdn博客刷点击率代码
此文为转载,亲测有效. import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; impo ...
- C# Activex开发、打包、签名、发布
一.前言 最近有这样一个需求,需要在网页上面启动客户端的软件,软件之间的通信.调用,单单依靠HTML是无法实现了,因此必须借用Activex来实现.由于本人主要擅长C#,自然本文给出了用C# ...