2017-08-10 10 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

関連する問題