2015-11-01 2 views
0

Я столкнулся с проблемой только в Websphere 8.5. У меня есть страница входа в систему, где после того, как пользователь вводит имя пользователя/пароль, вызов Ajax выполняется в authTest/j_security_check .oauthTest является корнем контекста приложения.Фильтр Websphere 8.5

На стороне сервера у меня есть 2 фильтра и несколько сервлетов.

<web-app> 
    <servlet> 
    <servlet-name>JSceurityCheck</servlet-name> 
    <servlet-class>provider.oauth.servlet.JSceurityCheck</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>JSceurityCheck</servlet-name> 
    <url-pattern>/j_security_check</url-pattern> 
    </servlet-mapping> 
<filter> 
    <display-name>OAuthFilter</display-name> 
    <filter-name>OAuthFilter</filter-name> 
    <filter-class>oauth.filter.OAuthFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>OAuthFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 

<filter> 
    <display-name>DispatchFilter</display-name> 
    <filter-name>DispatchFilter</filter-name> 
    <filter-class>dispatcher.filter.DispatchFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>DispatchFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
</web-app> 

управления достигает OAuthFilter откуда (запрос, ответ) вызов chain.doFilter сделан. Позже управление достигает DispatchFilter, который также вызывает chain.doFilter (запрос, ответ).

Теперь элемент управления должен доходить до сервлета JSceurityCheck, но до того, как управление достигнет этого сервлета, сервер приложений websphere выбрасывает исключение.

Caused by: java.lang.IllegalArgumentException: Location cannot be null in javax.servlet.http.HttpServletResponse.sendRedirect(location) 
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendRedirectWithStatusCode(WebAppDispatcherContext.java:539) 
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendRedirect(WebAppDispatcherContext.java:527) 
at com.ibm.ws.webcontainer.srt.SRTServletResponse.sendRedirect(SRTServletResponse.java:1350) 
at com.ibm.ws.security.web.FormLoginExtensionProcessor.formLogin(FormLoginExtensionProcessor.java:734) 
at com.ibm.ws.security.web.FormLoginExtensionProcessor.formLogin(FormLoginExtensionProcessor.java:228) 
at com.ibm.ws.security.web.FormLoginExtensionProcessor.handleRequest(FormLoginExtensionProcessor.java:206) 
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136) 
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97) 
at com.teamcenter.lis.provider.dispatcher.filter.DispatchFilter.doFilter(DispatchFilter.java:178) 
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) 
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) 
at com.teamcenter.lis.provider.oauth.filter.OAuthFilter.doFilter(OAuthFilter.java:144) 
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) 
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) 
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:928) 
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1025) 

Тот же самый код работает в JBOSS 7, Tomcat 7 и WebLogic Server 12. Только в WebSphere 8.5 она отбита. Если у кого есть какие-либо подсказки, пожалуйста, дайте мне знать.

+0

Является ли ваш вызов Ajax отправленным с помощью POST? j_security_check ожидает POST-вызов. Также попробуйте создать фиктивную страницу входа и посмотреть, ведет ли она себя так, как вы ожидаете. – Gas

ответ

1

URI/j_security_check запускает FormLoginExtensionProcessor формы WebSphere (некоторая информация here), которая использует параметры j_username/j_password в HttpRequest для аутентификации пользователя. Если информация отсутствует, она пытается перенаправить на страницу с ошибкой. Можете ли вы попробовать изменить url-шаблон, чтобы не содержать j_security_check и посмотреть, не изменилось ли это?

Смежные вопросы