在设置登录拦截器的时候,  拦截了一部分方法 可是当拦截成功后跳转到登录界面的时候,提交登录还是被拦截,我已经设置了excludeMethods 参数,可是不起作用,请大牛们帮看看 现在贴代码<package name="shop.front" extends="shop-default">
<!-- 配置拦截器 -->
<interceptors>
<interceptor name="AuthorizationInterceptor" class="com.ideal.action.interceptor.AuthorizationInterceptor">
<param name="excludeMethods">login</param>
</interceptor>
<interceptor-stack name="customerDefaultStack">
<interceptor-ref name="AuthorizationInterceptor">
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="customerDefaultStack"></default-interceptor-ref>
<global-results>
<result name="login">/login.jsp</result>
<result name="loginSuccess">/welcome.jsp</result>
</global-results>
<action name="index" class="com.ideal.action.basic.IndexAction">
<result>/index.jsp</result>
</action>
</package>拦截的方法          <package name="shop.order" extends="shop.front" namespace="/product">
<action name="order_*" method="{1}" class="orderAction">
<result name="add">/test.jsp</result>
</action>
</package>访问add方法可以被拦截 跳到登录页面。
拦截器代码
package com.ideal.action.interceptor;import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpSession;   
import org.apache.struts2.ServletActionContext;   
import com.opensymphony.xwork2.ActionInvocation;   
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;   public class AuthorizationInterceptor extends MethodFilterInterceptor   
{   
    private static final long serialVersionUID = 2071704648277594728L;       
    public String intercept(ActionInvocation invocation) throws Exception      
     {       
         HttpServletRequest request=ServletActionContext.getRequest();      
         System.out.println(123);     
         HttpSession session=request.getSession();      
         //通过session 判断用户是否登录   
         if(session!=null && session.getAttribute("user")!=null) {      
                 return invocation.invoke();      
          }      
         //设置客户原来请求的url地址      
         session.setAttribute("url", getGoingURL(request));   
         return Action.LOGIN;      
     }      
        
     private String getGoingURL(HttpServletRequest request)      
     {       
         String url=request.getHeader("Referer");      
         if(url==null || url.equals(""))      
         {      
             //如果请求的是ACTION 则通过该代码获取URL地址,当然可以完善其功能   
             url = request.getContextPath()+request.getServletPath()+"?"+request.getQueryString();                     
         }      
         return url;
     } @Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
return intercept(invocation);
} }   
可是在执行登录提交的方法时又被拦截了 我在excludeMethods设置了login理论上不应该呗拦截了  login在这个包中
        <package name="shop.customer" extends="shop.front" namespace="/customer">
<action name="customer_*" class="customerAction" method="{1}">
<result name="registe">/registeSuccess.jsp</result>
<result name="login">/login.jsp</result>
</action>
</package>
通过customer/customer_login可以访问, 求大牛解决

解决方案 »

  1.   

    问题在  这里:<default-interceptor-ref name="customerDefaultStack"></default-interceptor-ref>
    你自定义的拦截器栈 名叫AuthorizationInterceptor,可见没有起作用。
    修改成::
    <default-interceptor-ref name="AuthorizationInterceptor"></default-interceptor-ref>
    就可以了。加油~~
      

  2.   

    我非常抱歉,刚刚没看清楚,后来又发现问题了。不跟你解决都不好意思了。
    定义一个拦截器栈它 的范围仅仅局限于 该定义的包内,但是你的login方法,是在另一包下配置的,所以login方法的配置应该放在最上面那个包下即可。。