如果多个action共用拦截器,那不是要在每个action都要写<interceptor-ref name="MyInterceptor"/>
有没有简单的方法
有没有简单的方法
解决方案 »
- spring注入失败
- 小弟跪求Struts2 整合jaspereport相关书籍(PDF),感谢各位大哥大姐!
- Error:This method must return a result of type String?
- 新手关于Spring AOP的问题
- java中的model和数据库中的view怎么一一对应,就像java中的model和数据库中的表用*.hbm.xml对应起来
- 别人的类包,如何用Hibernate映射?
- 请教:当机是什么意思啊?它的准确概念是什么?
- 一个RMI部署的问题
- 如何修改Struts自带的上传例子,使它能同时上传多个文件(两个就行)
- mssql jdbc的问题,真的奇怪!大家看看!
- 想学习Struts2和JSP+AJAX的应用
- struts2配置问题(我想应该不是菜鸟问题)
自己定义<package name="myPkg" abstract="true" extends="struts-default"></package>
在这个包下面定义拦截器, 这个包下面定义拦截器栈的引用, 引用defaultStack和你自己定义的拦截器!
然后你需要用这个拦截器的包都继承这个包就好了.!
但是这样会有个问题. 你一个包下面不是所有的action都要用到这个拦截器..!或者你把要用到这个拦截器的action分在一个包下面!
这样做有利有弊.! 权衡吧.!
package下 <interceptors>这里面定义拦截器引用</interceptors>
<interceptors>
<interceptor name="MyInterceptor" class="interceptor.MyInterceptor"></interceptor>
<interceptor-ref name="MyInterceptor"/>这个放这里出错的
</interceptors>
<action name="a">
<result type="freeer">/WEB-INF/ftl/a.ftl</result>
</action> <action name="login" class="s2.Login">
<interceptor-ref name="MyInterceptor"/>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result type="freeer">/WEB-INF/ftl/b.ftl</result>
</action>
</package>
<package name="xxx-default" extends="struts-default">
<interceptors>
<interceptor name="loginAuth"
class="XXX.LoginAuthInterceptor" />
<interceptor-stack name="completeStackWithLoginAuth">
<interceptor-ref name="loginAuth" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="completeStackWithLoginAuth" />
<global-results>
<result name="login">/userLogin/error.jsp</result>
<result name="expire">/modifyPW/modifyPW.jsp</result>
<result name="forbid">/userLogin/forbid.jsp</result>
</global-results>
</package>@SuppressWarnings("serial")
public class LoginAuthInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
// 获得会话中的用户身份字段
Map session = actionInvocation.getInvocationContext().getSession();
String user = (String) session.get(ISysParam.SESSION_USER);
if (null == user) {
return Action.LOGIN;
} else {
StringBuffer invokeMtd = new StringBuffer(actionInvocation
.getProxy().getNamespace());
invokeMtd.append("/"
+ actionInvocation.getInvocationContext().getName());
String role = (String) session.get(ISysParam.USER_ROLE);
//测试代码 如果是用户名是admin 则不进行权限判断
// if(user.equals(ISysParam.ROLETYPE_ADMIN)){
// return actionInvocation.invoke();
// }
/*
* 得到该所能操作的名称空间 if(可以访问当前的名称空间){ 跳出拦截器 else{ 转到没有权限的页面 } }
*/
// if (role.contains(invokeMtd.toString())) {
// return actionInvocation.invoke();
// } else {
// return "forbid";
// } // if (!user.getUserName().equals(ISysParam.ROLETYPE_ADMIN)) {
// // 对非ADMIN用户,检查模块访问权限
// if (!chkPrivilege()) {
// log.debug(user.getUserName() + ":" +ISysParam.OPER_CANCEL);
// return FORBID;
// }
// }
// return actionInvocation.invoke();
// }
return actionInvocation.invoke();
} }
}<package name="xxx" namespace="/xxx"
extends="xxx-default">
<action name="*" method="{1}" class="XXXAction">
<result name="input">{1}.jsp</result>
<result name="error">{1}.jsp</result>
<result name="success">{1}.jsp</result>
</action>
</package>
<package name="xxx2" namespace="/xxx2"
extends="xxx-default">
<action name="*" method="{1}" class="XXX2Action">
<result name="input">{1}.jsp</result>
<result name="error">{1}.jsp</result>
<result name="success">{1}.jsp</result>
</action>
</package>
不知道这样把所有的代码都贴出来了。还能看得懂么?