如何获取struts2执行动作的method?

如何获取struts2执行动作的method?

问题描述:

struts2的拦截器功能比较强大,但最近遇到一个困惑的问题,研究了好长时间仍没有方法。

在struts2中一个form有多个action时,可以很简单实现:
<s:form action="submit" namespace="/demo">
<s:textfield name="msg" label="输入内容" />
<s:submit name="save" value="保存" align="left" method="save" />
<s:submit name="print" value="打印" align="left" method="print" />
</s:form>

但是我想做一个统一的权限过滤器,也就是说save和print是有权限的才能执行,我现在无法在demo.action得到method,在哪个过程里做呢?请大虾给予帮助!

stuts1.*里面有一个getMethodName的过程,可struts2里不知道该如何做

在拦截器中:
protected String doIntercept(ActionInvocation inter) throws Exception {

通过 :
log.debug([b]inter.getProxy().getMethod()[/b]);

可以获取你所执行的Method方法。

可以满足你的需求。 :lol:

将方法名挂在URL的参数后面不就得了,我们系统现在就是这么做的,然后在ACTION中判断传过来的方法名,进行不对的方法调用

还有就是在界面用隐藏域搞一个方法名的变量,点不同的按钮就可以给这个变量动态给值。

在struts2配置文件中有个ApplicationFramework.xml的文件
可以在这里添加拦截器,拦截Action中除get,set方法外的所有方法:




/aop:aspect
/aop:config

在类可以通过
Object o;
o = pjp.proceed();
String shortName = pjp.toShortString();
String methodName = shortName.substring(10, shortName.length() - 1);//获取方法名称
String className = pjp.getTarget().getClass().getName();//获取该方法所在的包.

自定义一个拦截器,在该拦截器中实现权限的检查,检查不通过不执行action
public class AuthorityInterceptor extends AbstractInterceptor
{
public String intercept(ActionInvocation invocation) throws Exception
{
ActionContext ctx = invocation.getInvocationContext();
ValueStack vs = invocation.getStack();
Map session = ctx.getSession();
// 读取必要信息
String user = (String)session.get("user");
// TODO 权限检查
if (/**检验OK*/)
{
//执行action
return invocation.invoke();
}
// 返回错误
return Action.LOGIN;
}
}
对所有要进行权限检查的action都使用该拦截器进行权限检查.
<!-- 权限控制拦截器-->





<!-- 拦截器-->
<!-- struts2默认拦截器栈 -->

<!-- 权限控制拦截器 -->