我确实从 Jboss AS7 /EAP6 迁移到 Wildfly8,并想在这里询问有关 undertow 的任何提示,为什么它不像 catalina 在 EAP6 中那样处理请求参数。
所以,我从客户端调用 url './client/boom/index.htm?i=1',它遇到了一个错误 servlet,我想在其中获取参数值i
:
httpServletRequest.getParameter("i");
对于 EAP6,它返回 1,但对于 Wildfly8,它返回 null。为什么?
调用链如下(假设基本身份验证):
- 使用 js 调用 url './client/boom/index.htm?i=1'。
- Flow 没有进入 UsernamePasswordLoginModule 的子类,因为需要授权。
- 流来到错误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