Приложение JSF, дающее 404 для подконтекста - PullRequest
0 голосов
/ 19 сентября 2010

Я работаю над веб-приложением, которое использует JSF. У меня есть папка с именем «admin» в разделе «web», и у меня есть несколько страниц JSP в папке «admin». Я могу получить доступ к страницам jsp через «web», но когда я пытаюсь получить доступ к страницам под «admin», я получаю «404-Запрошенный ресурс не может быть найден» «Context.xml» для моего приложения выглядит примерно так:

<Context antiJARLocking="true" path="/MyApp"/>

Эта штука работает на моем локальном tomcat, но когда я внедряю ее на моих tomcat провайдеров веб-хостинга, у меня возникает вышеупомянутая проблема. Что именно мне нужно сделать, чтобы решить эту проблему.

Вот файл server.xml для моего приложения на хостинге предоставляет tomcat:

<Host name="myapp.com" appBase="/home/myapp/public_html">
      <Alias>www.myapp.com</Alias>
      <Context path="" reloadable="true" docBase="/home/myapp/public_html" debug="1"/>
      <Context path="/manager" debug="0" privileged="true"
          docBase="/usr/local/jakarta/tomcat/server/webapps/manager">
      </Context>
   </Host>

Или мне нужно добавить URL-сопоставление в мой web.xml?

У меня есть следующий фильтр сервлетов в файле web.xml для '/ admin / *' url-pattern

    <filter>
    <filter-name>SecurityFilter</filter-name>
    <filter-class>com.myapp.SecurityFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SecurityFilter</filter-name>
    <url-pattern>/admin/*</url-pattern>
</filter-mapping>

И код фильтра выглядит следующим образом:

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

    lgMgr.logDebug("doFilter() is called...");
    String validuser = null;
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;                        
    HttpSession session = req.getSession(true);        

    //If authorization key not in session, redirect to login page.
    validuser = (String) session.getAttribute(Common.AUTH_USER);

    if(validuser != null) {
        lgMgr.logDebug("doFilter(): User is allowed to access the page...");
        //If the user is allowed access to the URI, let the flow proceed as normal
        chain.doFilter(request, response);
        return;
    } else {
        lgMgr.logDebug("doFilter(): User is not allowed to access the page, redirecting user login...");
        //User not allowed access - redirect to login page
        res.sendRedirect(req.getContextPath() +  "/AdmLogin.jsf");
        return;
    }
}

1 Ответ

0 голосов
/ 19 сентября 2010

Файлы в /WEB-INF не общедоступны. Я понятия не имею, почему это работает локально, но это нарушает спецификацию сервлета. Кроме того, JSF не может пересылать представления на страницы JSP в папке /WEB-INF, они должны быть размещены в общедоступном веб-контенте (на одну папку выше уровня /WEB-INF папки).

...