2017-08-10 92 views
1

首先對不起我的英語,我的問題是,當嘗試使用webseal配置Spring Filter時,我可以使用我的用戶信息從頭獲取「iv-user」(我只需要這個) ,但是當重定向到一個內部URL,我navegator顯示 「ERR_TOO_MANY_REDIRECTS」,也許我的配置是壞zk + Spring 4 +使用webseal進行身份驗證

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> 
    <description>My Project Application</description> 
    <display-name>my-project-web</display-name> 

    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
      /WEB-INF/applicationContext.xml 
     </param-value> 
    </context-param> 
    <context-param> 
     <param-name>resteasy.scan</param-name> 
     <param-value>false</param-value> 
    </context-param> 
    <context-param> 
     <param-name>resteasy.scan.providers</param-name> 
     <param-value>false</param-value> 
    </context-param> 
    <context-param> 
     <param-name>resteasy.scan.resources</param-name> 
     <param-value>false</param-value> 
    </context-param> 

    <listener> 
    <display-name>Spring Context Loader</display-name> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <listener> 
    <listener-class> 
      org.springframework.web.context.request.RequestContextListener 
     </listener-class> 
    </listener> 

    <filter> 
    <filter-name>appFormacionFilterSesion</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>appFormacionFilterSesion</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 


    <listener> 
    <description>ZK listener for session cleanup</description> 
    <listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class> 
    </listener> 
    <servlet> 
    <description>ZK loader for ZUML pages</description> 
    <servlet-name>zkLoader</servlet-name> 
    <servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class> 
    <init-param> 
     <param-name>update-uri</param-name> 
     <param-value>/zkau</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>zkLoader</servlet-name> 
    <url-pattern>*.zul</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>zkLoader</servlet-name> 
    <url-pattern>*.zhtml</url-pattern> 
    </servlet-mapping> 
    <servlet> 
    <description>The asynchronous update engine for ZK</description> 
    <servlet-name>auEngine</servlet-name> 
    <servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class> 
    </servlet> 

    <servlet> 
    <servlet-name>dspLoader</servlet-name> 
    <servlet-class>org.zkoss.web.servlet.dsp.InterpreterServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dspLoader</servlet-name> 
     <url-pattern>*.dsp</url-pattern> 
    </servlet-mapping> 


    <servlet-mapping> 
    <servlet-name>auEngine</servlet-name> 
    <url-pattern>appformacionwb/zkau/*</url-pattern> 
    </servlet-mapping> 
    <session-config> 
    <session-timeout>60</session-timeout> 
    </session-config> 
    <mime-mapping> 
    <extension>doc</extension> 
    <mime-type>application/vnd.ms-word</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
    <extension>gif</extension> 
    <mime-type>image/gif</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
    <extension>htm</extension> 
    <mime-type>text/html</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
    <extension>html</extension> 
    <mime-type>text/html</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
    <extension>jpeg</extension> 
    <mime-type>image/jpeg</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
    <extension>jpg</extension> 
    <mime-type>image/jpeg</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
    <extension>js</extension> 
    <mime-type>text/javascript</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
    <extension>pdf</extension> 
    <mime-type>application/pdf</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
    <extension>png</extension> 
    <mime-type>image/png</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
    <extension>txt</extension> 
    <mime-type>text/plain</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
    <extension>xls</extension> 
    <mime-type>application/vnd.ms-excel</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
    <extension>xml</extension> 
    <mime-type>text/xml</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
    <extension>zhtml</extension> 
    <mime-type>text/html</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
    <extension>zul</extension> 
    <mime-type>text/html</mime-type> 
    </mime-mapping> 
    <welcome-file-list> 
    <welcome-file>index.zul</welcome-file> 
    </welcome-file-list> 
</web-app> 

我的過濾器

import java.io.IOException; 
import java.util.logging.Logger; 

import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServletRequest; 

import org.apache.commons.lang3.StringUtils; 

public class AppFormacionFilter implements Filter { 

    private final static Logger log = Logger.getLogger(AppFormacionFilter.class.getName()); 

    @Override 
    public void destroy() { 

    } 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
      throws IOException, ServletException { 


     request.setCharacterEncoding("UTF-8"); 

     if (request instanceof HttpServletRequest) { 

      HttpServletRequest req = (HttpServletRequest) request; 

      if(req.getHeader("iv-user")==null){ 
       log.info("El usuario ingresado es vacio "); 
      }else{ 
       log.info("El usuario que ingreso "+req.getHeader("iv-user")); 

       req.getSession().setAttribute("username", req.getHeader("iv-user")); 
       req.getSession().setAttribute("urlRedirect", req.getHeader("referer")); 

       String uriReqURI = req.getHeader("Cookie"); 

       String[] uriArray = StringUtils.split(uriReqURI, ";"); 

       if(uriArray.length>0){ 
        req.getSession().setAttribute("url", uriArray[0]); 
        log.info(uriArray[0]); 
       } 

      } 

      HttpServletResponse httpResponse = (HttpServletResponse) response; 
      httpResponse.sendRedirect("/someUrl.zul"); 

     } else { 
      chain.doFilter(request, response); 
     } 

    } 

    @Override 
    public void init(FilterConfig arg0) throws ServletException { 
     // TODO Auto-generated method stub 

    } 

} 

請,也許一些例子?,感謝所有... !

回答

0

過濾appFormacionFilterSesion被配置到任意路徑/*上運行,這意味着在執行路徑httpResponse.sendRedirect("/someUrl.zul")當你的過濾器的代碼被再次調用。也許你需要添加req.getSession().getAttribute("username") != null到你的主要條件。

+0

感謝Damian .. !!!,URL重定向正確,但不顯示頁面(爲空),但是當通過chain.doFilter更改重定向時,結點(webseal)丟失,所以頁面丟失了。 – Jesus

+0

例如: * http://someurl/junction/contextroot/index.zul然後重定向到 http://someurl/contextroot/zul/somepage.zul – Jesus