0

我确实从 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. 流来到错误servlet

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

在这里,我需要在错误 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 
4

1 回答 1

0

也许这个问题与转发多部分请求可能会丢失提交的表单参数有关

尝试通过添加此注释@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 头字段,该字段包含适用于所请求资源的质询。

检查您是如何进行认证的。

于 2014-10-09T01:29:16.280 回答