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