【问题标题】:Undertow (Wildfly8) doesn't handle request parametersUndertow (Wildfly8) 不处理请求参数
【发布时间】:2014-12-03 07:09:31
【问题描述】:

我从 Jboss AS7 /EAP6 迁移到 Wildfly8,并想在这里询问有关 undertow 的任何提示,为什么它不像 catalina 在 EAP6 中那样处理请求参数。

所以,我从客户端调用 url './client/boom/index.htm?i=1',它遇到了一个错误 servlet,我想在其中获取参数 i 的值:

httpServletRequest.getParameter("i");

EAP6 返回 1,但 Wildfly8 返回 null。为什么?

调用链如下(假设基本身份验证):

  1. 用 js 调用 url './client/boom/index.htm?i=1'。
  2. Flow 没有进入 UsernamePasswordLoginModule 的子类,因为需要授权。
  3. Flow 进入错误 servlet 与

httpServletRequest.getAttribute("javax.servlet.error.status_code") == 401 httpServletRequest.getAttribute("javax.servlet.error.message") == 未授权

在这里,我需要在 error-servlet 中获取参数 i。

附加信息。

Error-servlet 是这样映射的:

<servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>*.error</url-pattern>
</servlet-mapping>
...
<error-page>
    <error-code>401</error-code>
    <location>/Error.error</location>
</error-page>

我在 jboss-web.xml 中声明了一个名为“boom”的安全域

<jboss-web>
    <security-domain>boom</security-domain>
    <disable-audit>true</disable-audit>
</jboss-web>

在standalone.xml中

<subsystem xmlns="urn:jboss:domain:security:1.2">
    <security-domains>
        ...
        <security-domain name="boom" cache-type="default">
            <authentication>
                <login-module code="com.boom.security.BoomLoginModule" flag="required"/>
            </authentication>
        </security-domain>
    </security-domains>
</subsystem>

Auth 方法在 web.xml 中被声明为基本。


更新。 EAP6 和 WF8 中错误 servlet 中的属性列表不同

WF8 中的属性:

javax.servlet.error.message: Unauthorized
javax.servlet.error.status_code: 401
javax.servlet.error.servlet_name: default
javax.servlet.error.request_uri: /boom-portal/client/boom/index.htm

EAP6 中的属性:

javax.servlet.forward.request_uri: /boom-portal/client/boom/index.htm
javax.servlet.forward.context_path: /boom-portal
javax.servlet.forward.servlet_path: /client/boom/index.htm
javax.servlet.forward.path_info: /Error.error
javax.servlet.forward.query_string: i=1
javax.servlet.error.message:
javax.servlet.error.status_code: 401
javax.servlet.error.servlet_name: default
javax.servlet.error.request_uri: /boom-portal/client/boom/index.htm 

【问题讨论】:

  • 首先,你使用的是什么框架? Spring MVC 还是 JSF?
  • @BuhakeSindi,没有框架。只是一个来自 js 的 post 请求。

标签: java servlets jboss wildfly undertow


【解决方案1】:

可能这个问题和Forwarded multipart requests may lose submitted form parameters有关

尝试通过添加此注解 @MultipartConfig 来更改 servlet 的设置

或者web.xml描述符中这样

<servlet>
    <servlet-name>Servlet</servlet-name>
    <servlet-class>.....</servlet-class>
    <load-on-startup>0</load-on-startup>        
    <multipart-config/>
 </servlet>

更新

问题在于身份验证,您收到的是状态码 401:

401 状态码说明

请求需要用户身份验证。响应必须包括 WWW-Authenticate 头域包含一个适用于 请求的资源。

检查您是如何进行身份验证的。

【讨论】:

  • @QuVad 我根据您的实现更新了答案,提供了更多信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 2017-07-17
  • 2013-07-14
  • 2010-12-01
  • 1970-01-01
相关资源
最近更新 更多