Блокировка прямого доступа к jsp в JSF 1.1.14 с помощью myfaces 1.1.8 - PullRequest
0 голосов
/ 05 мая 2020

У меня jsps определен в нескольких каталогах с расширением jspx в каталоге страниц в веб-приложении. Либо мне нужно определить ограничение безопасности, либо все jsps перемещены в WEB-INF, чтобы заблокировать прямой доступ к jsps.

Параметры контекста

<context-param>
        <param-name>facelets.VIEW_MAPPINGS</param-name>
        <param-value>/faces/*; *.jspx</param-value>
    </context-param>
<context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</param-value>
    </context-param>
<context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.jspx</param-value>
    </context-param>


<servlet-mapping>
...
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>

Вариант 1 изменить веб. xml чтобы включить ограничение безопасности, как показано ниже:

<security-constraint>
   <web-resource-collection>
       <web-resource-name>no_access</web-resource-name>
       <url-pattern>/faces/pages/*</url-pattern>
   </web-resource-collection>
   <auth-constraint/>
</security-constraint>

В моем приложении много всплывающих окон windows, и я попал в белый список 90% из них. В любом случае, я все еще могу добиться доступа к всплывающему окну windows без белого списка jsps?

Вариант 2 - Переместить папку страниц в WEB-INF До сих пор я сделал следующее:

Перемещен jsp каталог в WEB-INF

Обновлен ниже configs

<context-param>
            <param-name>facelets.VIEW_MAPPINGS</param-name>
            <param-value>/faces/WEB-INF/*; *.jspx</param-value>
        </context-param>

<servlet-mapping>
    ...
    <url-pattern>/faces/WEB-INF/*</url-pattern>
    </servlet-mapping>

Идентификаторы просмотра не были изменены.

        <from-view-id>*</from-view-id>
       <navigation-case> 
          <from-action>#{navigationController.processPage1}</from-action> 
          <from-outcome>page</from-outcome> 
          <to-view-id>/pages/common/base/page1.jspx</to-view-id> 
       </navigation-case> 

       <navigation-case> 
      <from-action>#{navigationController.processPage2}</from-action> 
      <from-outcome>page</from-outcome> 
      <to-view-id>/pages/somedir/page2.jspx</to-view-id> 
   </navigation-case>

Возможен ли вариант 2 при указанной выше настройке? В настоящее время нельзя использовать более новые версии.

Какой должен быть путь jspx, который мне нужно использовать в requestdispacher.forward

В настоящее время он выглядит следующим образом:

 RequestDispatcher rd=request.getRequestDispatcher("/faces/pages/common/base/page1.jspx");  
        rd.forward(request, response);

Я попытался обновить указанное выше до

RequestDispatcher rd=request.getRequestDispatcher("/faces/WEB-INF/pages/common/base/page1.jspx");  
        rd.forward(request, response);

При этом я получаю исключение Viewexpired

Как мне получить доступ к jsp в jsp в этой настройке? В настоящее время jsp имеет window.open, как показано ниже

window.open('/Webapp/faces/pages/common/base/page1.jspx')

Я бы обновил его до ниже

window.open('/Webapp/faces/WEB_INF/pages/common/base/page1.jspx')

Если это может быть достигнуто с текущей средой и некоторыми изменения конфигурации / кода, сообщите.

...