【发布时间】:2015-11-01 02:27:07
【问题描述】:
我只在 Websphere 8.5 中遇到问题。我有一个登录页面,在用户输入用户名/密码后,将对 authTest/j_security_check 进行 Ajax 调用。oauthTest 是应用程序的上下文根。
在服务器端,我确实有 2 个过滤器和几个 servlet。
<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(request, response) 调用。稍后控制到达 DispatchFilter,它也调用 chain.doFilter(request, response)。
现在假设控制到达 JSceurityCheck servlet,但在控制到达该 servlet 之前,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 中它才被破坏。 如果有人有任何线索,请告诉我。
【问题讨论】:
-
您的 Ajax 调用是使用 POST 发送的吗? j_security_check 需要 POST 调用。还可以尝试创建虚拟登录页面,看看它的行为是否符合您的预期。
标签: websphere