【问题标题】:Websphere 8.5 filterWebsphere 8.5 过滤器
【发布时间】: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


【解决方案1】:

/j_security_check URI 触发 WebSphere 的 FormLoginExtensionProcessor(一些信息 here),它使用 HttpRequest 中的 j_username/j_password 参数来验证用户。如果信息丢失,它会尝试重定向到错误页面。您可以尝试将 url-pattern 更改为不包含 j_security_check 并查看它是否有所不同?

【讨论】:

    猜你喜欢
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2016-07-12
    相关资源
    最近更新 更多