после веб-фильтра все изображения ушли на страницу jsf - PullRequest
2 голосов
/ 28 июня 2011

Я использую Spring Security с JSF 2. У меня есть фильтр, который контролирует, если доступ к БД на каждой странице в порядке. :

public void doFilter(ServletRequest aReq, ServletResponse aResponse, FilterChain aChain) throws IOException,
        ServletException
{

    ...
    if(!myContext.isdbRunning())
    {
        mLogger.debug("System not working. Redirecting to: "+"/error.jsf");
        aReq.setAttribute("errorMsj", "DB is not started. Please contact DB admin.");
        aReq.getRequestDispatcher("/error.jsf").forward(aReq, aResponse);
        return;
    }

    aChain.doFilter(aReq, aResponse);
    return; 
}

Если все в порядке, моя страница JSF отображается правильно. но когда фильтр находит проблему в БД, он обрабатывает страницу ошибки.

aReq.getRequestDispatcher("/error.jsf").forward(aReq, aResponse);

но на этой странице не отображаются изображения и другие материалы, основанные на CSS ..

блокирует ли Spring Security контроль и запрещает ли содержимое моей страницы? или у меня ошибка? Как я могу решить это? Могу ли я использовать слушатель фазы?

Редактировать: часть моего web.xml

  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>

  <filter>
    <filter-name>Gatekeeper</filter-name>
    <filter-class>com.jsfsample.filter.GateKeeperFilter</filter-class>
  </filter>

   <filter-mapping>
    <filter-name>Gatekeeper</filter-name>
    <url-pattern>*.jsf</url-pattern>
   </filter-mapping>


  <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

1 Ответ

1 голос
/ 28 июня 2011

Загружаются ли ваши css / scripts / images с отдельным запросом?

Если это так, убедитесь, что их URL (http://domain.com/styles.css) не защищен.


Немного подробнее онебезопасные определенные URL.

В вашем конфигурационном файле контекста безопасности у вас должно быть что-то вроде:

<http auto-config="false" use-expressions="true" entry-point-ref="authenticationEntryPoint">
    <intercept-url pattern="/something/relativeUrlThatLoadsImages.jsf" filters="none" />

    <!-- OR -->    

    <intercept-url pattern="/something/relativeUrlThatLoadsImages.jsf" access="IS_AUTHENTICATED_ANONYMOUSLY" />
</http>

Либо filters="none", либо access="IS_AUTHENTICATED_ANONYMOUSLY" защитит относительный URL, указанный в patternатрибут.

Лично я предпочитаю использовать filters="none", потому что он говорит Spring вообще не загружать цепочку фильтров для этих URL.

Таким образом, вам не нужно кодировать для создания Springигнорируйте эти URL-адреса, и в будущем у вас будет возможность легко изменить доступ к ним, если потребуется.

...