为什么配置的拦截器不起作用

d524660411 2012-06-01 01:41:40
<package name="user" extends="basePackage" namespace="/">
<interceptors>
<interceptor name="user"
class="com.igaming.management.webs.LoginInterceptor" />
<interceptor-stack name="userStack">
<interceptor-ref name="baseStack" />
<interceptor-ref name="user" />
</interceptor-stack>
</interceptors>
<!-- 配置默认拦截器栈 -->
<default-interceptor-ref name="userStack" />
<global-results>
<result name="notLogin" type="dispatcher">error/loginError.jsp</result>
</global-results>

</package>


配置后 未进入com.igaming.management.webs.LoginInterceptor这个拦截方法里面去



求高手指导
...全文
857 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zql6625 2013-04-19
  • 打赏
  • 举报
回复
7楼jdluojing讲的是对,action需要和拦截器配置在一个文件中,我也是这个原因导致拦截器不起作用,困惑了很久。多谢!
weep_Joran 2012-06-04
  • 打赏
  • 举报
回复
将你自己写的拦截配置设置为默认,删除其他的拦截配置试试看能否拦截
jdluojing 2012-06-03
  • 打赏
  • 举报
回复
配置好像没有问题,baseStack和defaultStack中部分拦截器是重复的。我也做过登录拦截器,能够成功拦截的。不过需要你的action都在你使用了登录拦截器的package中。看你的配置文件中没有定义action,仔细看下文档吧,可能是哪儿的细节忽略了
brightyq 2012-06-01
  • 打赏
  • 举报
回复
楼主的测试用的action在哪?
d524660411 2012-06-01
  • 打赏
  • 举报
回复
package com.igaming.management.webs;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.StrutsStatics;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class LoginInterceptor extends AbstractInterceptor {

private static final long serialVersionUID = 8103774267894131736L;

private Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);

@Override
public String intercept(ActionInvocation invocation) throws Exception {
HttpServletRequest request = (HttpServletRequest) invocation
.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
HttpSession session = request.getSession();
Object userislogin = session.getAttribute(OnlineUser.LOGIN_USER);
logger.info("user:",userislogin);
if (userislogin == null) {
return "notLogin";
}
return invocation.invoke();
}

}






这个事java代码
d524660411 2012-06-01
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

<!-- 是否显示详细错误信息 -->
<constant name="struts.devMode" value="false" />
<!-- 国际化资源文件名称 -->
<constant name="struts.custom.i18n.resources" value="i18n" />
<!-- 是否自动加载国际化资源文件 -->
<constant name="struts.i18n.reload" value="false" />
<constant name="sturts.locale" value="en_US" />
<!-- convention类重新加载 -->
<constant name="struts.convention.classes.reload" value="false" />
<!-- 浏览器是否缓存静态内容 -->
<constant name="struts.serve.static.browserCache" value="true" />
<!-- 配置使用Spring管理Action -->
<constant name="struts.objectFactory" value="spring" />
<!-- 上传文件大小限制设置 -->
<constant name="struts.multipart.maxSize" value="-1" />

<!-- 主题 -->
<constant name="struts.ui.theme" value="simple" />
<!-- 编码 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 后缀 -->
<constant name="struts.action.extension" value="action" />
<constant name="struts.convention.package.locators" value="struts,action" />

<!-- 结果资源的路径 -->
<constant name="struts.convention.result.path" value="/" />
<!-- URL资源分隔符 -->
<constant name="struts.convention.action.name.separator"
value="_" />

<package name="basePackage" extends="struts-default">
<interceptors>
<interceptor-stack name="baseStack">
<interceptor-ref name="exception" />
<interceptor-ref name="alias" />
<interceptor-ref name="servletConfig" />
<interceptor-ref name="i18n" />
<interceptor-ref name="prepare" />
<interceptor-ref name="chain" />
<interceptor-ref name="debugging" />
<interceptor-ref name="scopedModelDriven" />
<interceptor-ref name="modelDriven" />
<interceptor-ref name="fileUpload" />
<interceptor-ref name="checkbox" />
<interceptor-ref name="multiselect" />
<interceptor-ref name="staticParams" />
<interceptor-ref name="actionMappingParams" />
<interceptor-ref name="params">
<param name="excludeParams">
dojo\..*,^struts\..*,.*\\u0023.*,.*\\x5Cu0023.*,.*\\x5cu0023.*
</param>
</interceptor-ref>


</interceptor-stack>
</interceptors>

<!-- 配置默认拦截器栈 -->
<default-interceptor-ref name="baseStack" />

<!-- 未到找Action指向页面 -->
<default-action-ref name="errorPage" />

</package>

<package name="user" extends="basePackage" namespace="/">
<interceptors>
<interceptor name="user"
class="com.igaming.management.webs.LoginInterceptor" />
<interceptor-stack name="userStack">
<interceptor-ref name="baseStack" />
<interceptor-ref name="user" />
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!-- 配置默认拦截器栈 -->
<default-interceptor-ref name="userStack" />
<global-results>
<result name="notLogin" type="dispatcher">error/loginError.jsp</result>
</global-results>

</package>
</struts>



这是struts.xml
d524660411 2012-06-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

楼主把struts自带的拦截器也要配上。
<interceptor-stack name="userStack">
<interceptor-ref name="baseStack" />
<interceptor-ref name="user" />
...............................
...............................
..……
[/Quote]

这样不行挖

我把全部代码贴出来吧
brightyq 2012-06-01
  • 打赏
  • 举报
回复
楼主把struts自带的拦截器也要配上。
<interceptor-stack name="userStack">
<interceptor-ref name="baseStack" />
<interceptor-ref name="user" />
...............................
...............................
...............................
<interceptor-ref name="defaultStack"/>
weep_Joran 2012-06-01
  • 打赏
  • 举报
回复
顶一下 ,我也一样的问题

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧