Rich Faces 4.0 с jsf2.0 - PullRequest
       42

Rich Faces 4.0 с jsf2.0

1 голос
/ 15 мая 2011

Я делаю веб-приложение, используя JSF 2.0 и Rich Faces 4.0. Я хочу знать, что должно быть минимальным - запись в Web.xml и сталкивается с config.xml, чтобы приложение работало успешно.Имеет ли значение порядок декларации сервлета, я говорю, потому что, когда я запускаю свое приложение с настраиваемым фильтром безопасности, компонент richface иногда не рендерится.Можете ли вы дать мне пример файла Web.xml.


РЕДАКТИРОВАТЬ:

* Спасибо BalusC *

Проблема, когда я добавляю фильтр безопасности RichКомпонент лица не отображается ??Я чувствую вас мой вход в web.xml и фильтр безопасности.подскажите пожалуйста что не так я делаю тут

</p><p> `<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>MyApp</display-name>

<context-param>
    <param-name>org.richfaces.skin</param-name>
    <param-value>classic</param-value>
</context-param>
<context-param>
    <param-name>org.richfaces.enableControlSkinning</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>org.richfaces.enableControlSkinningClasses</param-name>
    <param-value>false</param-value>
</context-param>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>


<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>SecurityFilter</filter-name>
    <filter-class>com.my.SecurityFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SecurityFilter</filter-name>
    <url-pattern>*.jsf</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

</web-app>`   </p><p> Security Filter </p>  <p>  `import java.io.IOException;

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 javax.servlet.http.HttpServletResponse;

import com.ils.core.util.IlsUtil;

/**
 * @author --FILTER implementing class; Checks the authentication of every
 *         request
 */
public class SecurityFilter implements Filter {

public void init(FilterConfig config) throws ServletException {
}

public void doFilter(ServletRequest request, ServletResponse resp,
        FilterChain chain) throws IOException, ServletException {
    System.out.println("--------SecurityFilter.doFilter()--------");
    boolean redirToLoginPage = false;
    HttpServletRequest httpRequest = (HttpServletRequest) request;
    InputParamDto parameter = null;
    Object user = null;
    try {
        parameter = (InputParamDto) httpRequest.getSession().getAttribute(
                "inputParameter");
    } catch (Exception e) {
        e.printStackTrace();
    }
    if (parameter == null || IlsUtil.ifEmpty(parameter.getConsumer_id())) {
        redirToLoginPage = true;
    }
    if (httpRequest.getRequestURI().indexOf("login") == -1
            && redirToLoginPage) {
        HttpServletResponse httpResponse = (HttpServletResponse) resp;
        httpResponse.setContentType("text/plain");
        httpResponse.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
        String redirTo = httpRequest.getScheme() + "://"
                + httpRequest.getServerName() + ":"
                + httpRequest.getServerPort()
                + httpRequest.getContextPath() + "/";
        httpResponse.setHeader("Location", redirTo);
    } else {
        chain.doFilter(request, resp);
    }

}

public void destroy() {
}
}`</p>

Ответы [ 2 ]

2 голосов
/ 01 октября 2013

У меня была такая же проблема в моем проекте, поэтому я решил ее, добавив путь в валидацию, куда загружаются ресурсы richfaces и jsf.

Примерно так:

String uri = hr.getRequestURI();            
if (uri.endsWith(".view")
                && !uri.contains(ResourceHandler.RESOURCE_IDENTIFIER)
                && !uri.contains(ResourceHandlerImpl.RICHFACES_RESOURCE_IDENTIFIER)) {
            //You put your code here
}
1 голос
/ 16 мая 2011

Для JSF 2.0 достаточно обычного FacesServlet сопоставления в web.xml.faces-config.xml можно оставить пустым.RichFaces 4.0 не требует дополнительной настройки ни в одном из файлов.


Обновление согласно вашему обновлению: вам необходимо сопоставить свой фильтр безопасности с другим шаблоном URL.RichFaces будет динамически включать файлы CSS / JS в одно и то же отображение FacesServlet.Тем не менее, ваш фильтр безопасности, по-видимому, блокирует эти запросы (разве вы не обращали внимание на большое количество системных распечаток в журнале?).Я бы посоветовал поместить защищенные файлы в папку и вместо этого сопоставить фильтр, например, /secured/*, /private/*, /app/* и т. Д.

Не имеет отношения к проблеме, у вас есть много из FacesServlet отображений.Пожалуйста, держите его в чистоте и придерживайтесь одного.Я лично рекомендую *.xhtml.Таким образом, конечные пользователи не смогут больше просматривать исходный код JSF, просто отредактировав URL в адресной строке браузера.

...