Что может вызвать ошибку 401 в приложении Spring MVC? - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть веб-приложение, созданное с использованием JSP и Spring MVC, которое у меня не было, но в настоящее время я отвечаю за его исходный код.

Когда я тестирую приложение, перенаправляющее на большинство страниц, оно выдает ошибку 401 (неавторизовано).

Я искал в приложении, что может вызвать это, но безрезультатно.

Единственные подсказки, которые у меня есть, - это файл web.xml и mvc-dispatcher-servlet.xml, который сообщает мнеправильные перенаправления и обработчики исключений.

Страница web.xml содержит <security-constraint> теги, содержащие страницы, разрешенные для каждого пользователя, и все проблемные страницы находятся среди тегов <url-pattern> внутри каждого <security-constraint>.

Однако ни одна из страниц ничего не говорит о несанкционированных страницах.

Даже я пытаюсь отладить класс ManagedBean, связанный с каждой из этих страниц, но страница ошибки отображается, прежде чем я могу отладить любую строкукода.Я могу отлаживать только конструктор Managed Bean и только когда приложение развернуто.

Если вы хотите пример или содержимое некоторых файлов.Дайте мне знать, и я передам их вам.

Вот фрагменты mvc-dispatcher-servlet.htm:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass"
              value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/paginas/" />
    <property name="suffix" value=".jsp" />
</bean>
<bean name="/bloqueoindividual.htm"
      class="cl.claro.aplicaciones.webberr.controler.BloqueoIndividual">
     <!-- DOESN'T WORK. ERROR 401 -->
</bean>
<bean name="/bloqueomasivo.htm" class="cl.claro.aplicaciones.webberr.controler.BloqueoMasivo"   >
    <!--WORKS-->
</bean>

 <bean id="handlerExceptionResolver" class="cl.claro.aplicaciones.webberr.exception.ExceptionHandler"  >
   <!-- from ExceptionHandler -->
   <property name="ajaxErrorView" value="ajaxexception" />
   <property name="ajaxDefaultErrorMessage" value="${ajaxErrorMessage}" />
   <property name="ajaxShowTechMessage" value="false" />

   <!-- from SimpleMappingExceptionResolver -->
   <property name="defaultErrorView" value="checked"/>
   <property name="exceptionMappings">
      <props>
         <prop key="java.lang.RuntimeException" >unchecked</prop>
      </props>
    </property>
</bean>

<!-- Message resource bundle and locale -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource"  >
   <property name="defaultEncoding" value="UTF-8" />
   <property name="basenames">
      <list>
         <value>classpath:message</value>
      </list>
   </property>
   <property name="fallbackToSystemLocale" value="false" />
</bean>

<bean id="localeResolver"
      class="org.springframework.web.servlet.i18n.SessionLocaleResolver"  >
   <property name="defaultLocale" value="es" />
</bean>

<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"  >
   <property name="paramName" value="lang" />
</bean>
    <!-- End of resource bundle -->

    <!-- DISABLE CACHE DE PAGINAS -->

<mvc:interceptors>
   <mvc:interceptor>
      <mvc:mapping path="/**"/>
      <bean class="org.springframework.web.servlet.mvc.WebContentInterceptor"  >
         <property name="cacheSeconds" value="0" />
         <property name="useExpiresHeader" value="true"/>
         <property name="useCacheControlHeader" value="true"/>
         <property name="useCacheControlNoStore" value="true"/>
         <property name="alwaysUseFullPath" value="true"/>
      </bean>
   </mvc:interceptor>
</mvc:interceptors>

РЕДАКТИРОВАТЬ: Как попросил Акшай Мишра, я искал приложение длялюбой фильтр, который будет применяться к страницам.Я нашел 2 фильтра.

  1. Один фильтр - это класс, который реализует интерфейс javax.servlet.Filter и, следовательно, переопределяет его метод doFilter следующим образом:
public static final String TXID_HEADER = "X-TXID";    

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain fc) throws IOException, ServletException {
        String path = ((HttpServletRequest) servletRequest).getRequestURI();
        if (path.startsWith(((HttpServletRequest) servletRequest).getContextPath() + "/resources/")) {
            //no aplicar txid a contenido estatico
            fc.doFilter(servletRequest, servletResponse);
            return;
        }

        long t1 = System.currentTimeMillis();

        try{            
            String txID = ((HttpServletRequest)servletRequest).getHeader(TXID_HEADER);
            if (txID == null) {
                txID = UUID.randomUUID().toString();
            }
            ThreadContext.put("txid", txID);

            HttpServletRequest request = (HttpServletRequest)servletRequest;

            log.info("Peticion recibida: metodo=[{}] url=[{}] desde=[{}]", request.getMethod(), request.getRequestURI(), request.getRemoteAddr());

            HttpServletResponse response = (HttpServletResponse)servletResponse;
            response.setHeader(TXID_HEADER, txID);            
            response.setCharacterEncoding(CharEncoding.UTF_8);            
            fc.doFilter(servletRequest, servletResponse);
        }
        finally{
            long t2 = System.currentTimeMillis();
            log.info("Peticion atendida en {} ms", t2-t1);
            ThreadContext.remove("txid");            
        }
    }
Второй фильтр находится в web.xml и фильтрует только расширение, разрешенное для страниц и перенаправлений:
<filter>
   <filter-name>ResponseOverrideFilter</filter-name>
   <filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>ResponseOverrideFilter</filter-name>
   <url-pattern>*.htm</url-pattern>
</filter-mapping>
<filter-mapping>
   <filter-name>ResponseOverrideFilter</filter-name>
   <url-pattern>*.jsp</url-pattern>
</filter-mapping>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...