session 超时,sendredirct 有关问题 BeanNameUrlHandlerMapping

session 超时,sendredirct 问题 BeanNameUrlHandlerMapping
出问题处:
response.sendRedirect(request.getContextPath()+loginUrl);
在session 超时时 back/mgrLogin.do
总是跳转到mgrLogin.do
 404
不知道是什么原因


对此:myworkfirst同学上次讨论 写道
  看下后台日志,就知道了,路径不正确
会话超时,怎么不用 过滤器呀?

在session不超时的时候 

response.sendRedirect(request.getContextPath()+loginUrl);
可以正确的跳转到,配置的页面/back/mgrLogin.do
<property name="loginUrl">  
      <value>/back/mgrLogin.do</value>  
     </property> 

但当session超时的时候,则莫名其妙的跳转到 mgrLogin.do
不过后台没有报错。估计是session超时,对跳转有影响,我的项目中还用到了,urlrewrite. 再次到权限检查器的时候,已经是/mgrLogin.do
解决方法么:
到也没有什么不好的,将登录的路径改为根路径解决了


<bean id="backAuthHandler" class="com.emar.framework.auth.BackAuthHandler"></bean> 

<bean id="backAuthorizeURLInterceptor" class="com.emar.framework.auth.BackAuthorizeURLInterceptor"> 
     <property name="authHandle" ref="backAuthHandler"></property> 
     <property name="loginUrl"> 
     <value>/back/mgrLogin.do</value> 
     </property> 
     <property name="checkAccessUrls"> 
            <list> 
                <value>/back/*</value> 
            </list> 
        </property> 
        <property name="noCheckAccessUrls"> 
            <list> 
           <value>/back/mgrLogin.do</value> 
            </list> 
        </property> 
    </bean> 
    <bean name="defaultHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" autowire="no"> 

<property name="interceptors"> 
            <list> 
            <ref local="backAuthorizeURLInterceptor"/> 
            </list> 
        </property> 
     
    </bean> 


Java代码
public class BackAuthorizeURLInterceptor extends HandlerInterceptorAdapter {   
private UrlPathHelper urlPathHelper = new UrlPathHelper();    
private String[] checkAccessUrls;   
private String[] noCheckAccessUrls;//不需要保护的url资源   
private PathMatcher pathMatcher = new AntPathMatcher();   
    
private String loginUrl;   
private AuthHandle authHandle;//权限检查处理器   
public void setPathMatcher(PathMatcher pathMatcher) {   
  Assert.notNull(pathMatcher, "PathMatcher must not be null");   
  this.pathMatcher = pathMatcher;   
}   
    
     
    
/**  
  * @param loginUrl the loginUrl to set  
  */  
public void setLoginUrl(String loginUrl) {   
     Assert.notNull(loginUrl, "loginUrl must not be null");   
  this.loginUrl = loginUrl;   
}   
  
    
  
/**  
  * @param checkAccessUrls the checkAccessUrls to set  
  */  
public void setCheckAccessUrls(String[] checkAccessUrls) {   
     Assert.notNull(checkAccessUrls, "checkAccessUrls must not be null");   
  this.checkAccessUrls = checkAccessUrls;   
}   
  
    
  
/**  
  * @param noCheckAccessUrls the noCheckAccessUrls to set  
  */  
public void setNoCheckAccessUrls(String[] noCheckAccessUrls) {   
  this.noCheckAccessUrls = noCheckAccessUrls;   
}   
  
/**  
  * @param authHandle the authHandle to set  
  */  
public void setAuthHandle(AuthHandle authHandle) {   
  this.authHandle = authHandle;   
}   
  
/**  
  *   
  */  
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)   
     throws Exception {   
  String url = urlPathHelper.getLookupPathForRequest(request);   
  if (!isProtected(url) ) {   
   return true;//所请求的资源不需要保护.   
  }else if(this.pathMatcher.match(url, loginUrl+"*")){   
   return true;   
  }   
     
  boolean b = authHandle.checkAuth(request, response);   
     
  if(!b){   
  
     response.sendRedirect(request.getContextPath()+loginUrl);      
  }   
  return b;   
}   
    
private boolean isProtected(String urlPath) {   
  if(noCheckAccessUrls != null){   
   for (int i = 0; i < this.noCheckAccessUrls.length; i++) {   
    String registeredPath = noCheckAccessUrls[i];   
    if (registeredPath == null) {   
     throw new IllegalArgumentException("Entry number " + i + " in allowAccessUrls array is null");   
    } else {   
     if (this.pathMatcher.match(registeredPath, urlPath)) {   
      return false;   
     }        
    }   
   }   
  }   
  if (this.checkAccessUrls != null) {      
   for (int i = 0; i < this.checkAccessUrls.length; i++) {   
    String registeredPath = checkAccessUrls[i];   
    if (registeredPath == null) {   
     throw new IllegalArgumentException("Entry number " + i + " in allowAccessUrls array is null");   
    } else {   
     if (this.pathMatcher.match(registeredPath, urlPath)) {   
      return true;   
     }        
    }   
   }   
  }   
  return false;   
}   
  
}  

public class BackAuthorizeURLInterceptor extends HandlerInterceptorAdapter { 
private UrlPathHelper urlPathHelper = new UrlPathHelper(); 
private String[] checkAccessUrls; 
private String[] noCheckAccessUrls;//不需要保护的url资源 
private PathMatcher pathMatcher = new AntPathMatcher(); 

private String loginUrl; 
private AuthHandle authHandle;//权限检查处理器 
public void setPathMatcher(PathMatcher pathMatcher) { 
  Assert.notNull(pathMatcher, "PathMatcher must not be null"); 
  this.pathMatcher = pathMatcher; 
} 

  

/** 
  * @param loginUrl the loginUrl to set 
  */ 
public void setLoginUrl(String loginUrl) { 
Assert.notNull(loginUrl, "loginUrl must not be null"); 
  this.loginUrl = loginUrl; 
} 



/** 
  * @param checkAccessUrls the checkAccessUrls to set 
  */ 
public void setCheckAccessUrls(String[] checkAccessUrls) { 
Assert.notNull(checkAccessUrls, "checkAccessUrls must not be null"); 
  this.checkAccessUrls = checkAccessUrls; 
} 



/** 
  * @param noCheckAccessUrls the noCheckAccessUrls to set 
  */ 
public void setNoCheckAccessUrls(String[] noCheckAccessUrls) { 
  this.noCheckAccessUrls = noCheckAccessUrls; 
} 

/** 
  * @param authHandle the authHandle to set 
  */ 
public void setAuthHandle(AuthHandle authHandle) { 
  this.authHandle = authHandle; 
} 

/** 
  * 
  */ 
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 
     throws Exception { 
  String url = urlPathHelper.getLookupPathForRequest(request); 
  if (!isProtected(url) ) { 
   return true;//所请求的资源不需要保护. 
  }else if(this.pathMatcher.match(url, loginUrl+"*")){ 
   return true; 
  } 
  
  boolean b = authHandle.checkAuth(request, response); 
  
  if(!b){ 

  response.sendRedirect(request.getContextPath()+loginUrl);   
  } 
  return b; 
} 

private boolean isProtected(String urlPath) { 
  if(noCheckAccessUrls != null){ 
   for (int i = 0; i < this.noCheckAccessUrls.length; i++) { 
    String registeredPath = noCheckAccessUrls[i]; 
    if (registeredPath == null) { 
     throw new IllegalArgumentException("Entry number " + i + " in allowAccessUrls array is null"); 
    } else { 
     if (this.pathMatcher.match(registeredPath, urlPath)) { 
      return false; 
     }     
    } 
   } 
  } 
  if (this.checkAccessUrls != null) {   
   for (int i = 0; i < this.checkAccessUrls.length; i++) { 
    String registeredPath = checkAccessUrls[i]; 
    if (registeredPath == null) { 
     throw new IllegalArgumentException("Entry number " + i + " in allowAccessUrls array is null"); 
    } else { 
     if (this.pathMatcher.match(registeredPath, urlPath)) { 
      return true; 
     }     
    } 
   } 
  } 
  return false; 
} 

} 


response.sendRedirect(request.getContextPath()+loginUrl);
在session 超时时 back/mgrLogin.do
总是跳转到mgrLogin.do
 404
不知道是什么原因


对此:myworkfirst同学上次讨论 写道
  看下后台日志,就知道了,路径不正确
会话超时,怎么不用 过滤器呀?

在session不超时的时候 

response.sendRedirect(request.getContextPath()+loginUrl);
可以正确的跳转到,配置的页面/back/mgrLogin.do
<property name="loginUrl">  
      <value>/back/mgrLogin.do</value>  
     </property> 

但当session超时的时候,则莫名其妙的跳转到 mgrLogin.do
不过后台没有报错。估计是session超时,对跳转有影响,我的项目中还用到了,urlrewrite. 再次到权限检查器的时候,已经是/mgrLogin.do
解决方法么:
到也没有什么不好的,将登录的路径改为根路径解决了