Как проверить сопоставление действия URL-адреса Struts 1 в фильтре

Пожалуйста, может кто-нибудь помочь мне, мне нужно проверить сопоставление действия URL-адреса struts 1 на уровне фильтра. Если предоставленное сопоставление действия URL-адреса существует в Struts1, тогда все в порядке, в противном случае отображается ошибка 404. Этот код показывает страницу 404, но мне нужно проверить URL-адрес, прежде чем показывать его:

p_hsResponse.sendError(HttpServletResponse.SC_NOT_FOUND);

person asad khan    schedule 18.09.2014    source источник
comment
Почему именно? Чего вы пытаетесь достичь?   -  person Buhake Sindi    schedule 22.09.2014
comment
Я не могу сказать в комментарии, но я просто хочу проверить, существует ли сопоставление URL-адресов в struts-config или нет .... например, я имею доступ к hhtp://localhost: 8080/ABC/home.do Если он существует в struts-config.xml затем проверяет...   -  person asad khan    schedule 25.09.2014
comment
я имею в виду, что home.do существует в struts-config.xml или нет...   -  person asad khan    schedule 25.09.2014
comment
Struts это уже делает, зачем вам создавать фильтр для той же цели?   -  person Buhake Sindi    schedule 25.09.2014
comment
Если не знаешь, то не трать мое и свое время, братан....   -  person asad khan    schedule 02.10.2014
comment
Прекрати свое отношение. Я пытаюсь помочь вам. Я не обязан вам помогать. Кроме того, кто сказал, что мы не знаем, как это сделать? Я говорю, что Struts это уже реализовал. Это происходит на этапе инициализации/запуска Struts. Почему вы хотите сделать то же самое, что уже делает Struts?   -  person Buhake Sindi    schedule 02.10.2014
comment
потому что я аутентифицирую пользователя на уровне фильтра из-за единого входа, так как я должен проверить, что каждый запрос содержит идентификатор пользователя в заголовке или нет...   -  person asad khan    schedule 03.10.2014
comment
поэтому, когда пользователь недействителен, он отображает страницу ошибки, в то время как запрошенный URL-адрес не существует в struts-config....   -  person asad khan    schedule 03.10.2014
comment
Не забывайте, что фильтр сервлетов вызывается перед вызовом сервлета и после выполнения сервлета. Будет время, когда фильтр будет вызываться до вызова ActionServlet, поэтому желаемое решение не должно зависеть от конфигурации Struts.   -  person Buhake Sindi    schedule 03.10.2014
comment
Да, я знаю, что я думаю, что мне нужно аутентифицировать пользователя на уровне действия .... но это изменит весь поток, и это займет время...   -  person asad khan    schedule 09.10.2014


Ответы (1)


Основываясь на вашем комментарии, я не думаю, что разумно проверять информацию о пути запроса к сопоставлению действий struts.

Я предлагаю сопоставить ваш фильтр с тем же <url-mapping>, что и ваш Struts ActionServlet.

Пример: если ваш ActionServlet отображается на *.do (сопоставление суффикса), ваш фильтр должен быть сопоставлен с тем же.

<filter>
    <filter-name>My filter</filter-name>
    <filter-class>com.myApp.myFilter</filter-class>        
</filter>
<filter-mapping>
    <filter-name>My filter</filter-name>
    <url-pattern>*.do</url-pattern><!-- The same <url-pattern> to my Struts ActionServlet class
</filter-mapping>

Таким образом, он будет выполняться до/после вашего вызова ActionServlet.

person Buhake Sindi    schedule 03.10.2014
comment
что, если пользователь попробовал abc.do, а путь abc не существует в struts-config ??? это решение не осуществимо в этом случае... - person asad khan; 09.10.2014
comment
Тогда будет ошибка HTTP 404. В Struts возвращает пустой экран. Это то, что ты хочешь. Если невозможно получить доступ к несуществующей странице или ресурсу, должна вернуться ошибка HTTP 404. - person Buhake Sindi; 09.10.2014
comment
Необходимо выполнить проверку после того, как filter.chain завершится как действие публикации, а затем посмотреть, является ли статус http 404. - person tgkprog; 17.02.2015