У меня есть веб-приложение, созданное с использованием 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 фильтра.
- Один фильтр - это класс, который реализует интерфейс
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>