1. 写一个接受用户请求的action,继承DispatchAction,然后这个action里面处理各种业务需求,比如说add,delete等等,在各个方法上添加注解,然后在调用这个action的方法时检查有没有注解。
2. 关键是要弄明白是谁调的action?查看有没有注解的代码怎么写?写在哪?
3. 首先要弄明白struts1的流程,用户请求提交给ActionServlet之后,ActionServlet调用requestProcessor这个请求处理器,请求处理器根据你请求的地址,实例化Action对象,然后拿Action各个方法的数据,最后调Action的方法。
4. 现在就断点调试来看看是请求处理器的哪个方法调了action,哪个调了就重写哪个,断点段在ActionServlet的dopost方法上,发现是processActionPerform调用的action,那就准备重写吧!
5. 写一个自己的请求处理器MyRequestProcessor,继承RequestProcessor,然后override他的processActionPerform方法。当然要记得在xml文件中配置controller标签,指定用自己的请求处理器。
6. 在MyRequestProcessor中,首先要判断调用的是action的哪个方法,怎么得到这个方法呢?用反射!
一般action有三种方式:第一,直接继承Action的action,那么方法名就是“execute”;第二,继承DispatchAction的action,那么方法名就是request域中对应的mapping中的parameter;第三,继承MappingDispatchAction的action,那么方法名就是mapping中的parameter,通过反射得到调用action的哪个方法。
7. 然后判断调用的方法上面有没有注解,也就是调用这个方法需不需要权限,不需要,调用超类的processActionPerform;需要的话,检查用户的权限是否contains这个权限,是就放行,不是不放行!
代码就不写了,有了思想就有了代码!