【发布时间】:2015-03-24 16:43:59
【问题描述】:
我们遇到了 Tomcat 最新版本的问题,导致我们无法升级到高于 7.0.22 之类的版本。
我们将 FormBasedAuthentication 与自定义领域一起使用。
这是在 Windows 上使用 Tomcat 7.0.57 和 JDK 7u76 测试的。
我的设置有一个调用 j_security servlet 的登录表单。调用自定义领域并且身份验证成功,返回自定义主体。
Tomcat 然后将转发到受保护的资源,我们在 RequestListener 中捕获请求。
问题是,request.getUserPrincipal() 返回 null。调试器显示,request.getSession(false)(SessionWrapper 的实例,包含 StandardSession)返回的 sessionwrapper 有一个字段“principal”,其中包含从我的领域返回的主体。
我在 bugzilla 中看到了关于在非受保护请求上返回 userprincipal 的要求的讨论,但这里的请求正在调用受保护的资源。
任何关于为什么会发生这种情况的想法都会非常有帮助。实际上,我认为这是一个错误,即请求未经过身份验证但仍被提供。
完全相同的设置在 Tomcat 7.0.12 上就像一个魅力,我认为到 7.0.22。
最好的问候,
托马斯
这里是请求监听的代码:
@Override
public void requestInitialized(ServletRequestEvent event) {
if( log.isTraceEnabled() ) {
log.trace( ">> requestInitialized" );
}
HttpServletRequest request = (HttpServletRequest)event.getServletRequest();
PortalRequest.current.set( request );
HttpSession httpSession = null;
GenericPrincipal genericPrincipal = (GenericPrincipal)request.getUserPrincipal();
// genericPrincipal is null, requestURI is pointing to a protected resource.
这是 web.xml 中的表单认证配置
<welcome-file-list>
<welcome-file>jsp/main.jsp</welcome-file>
</welcome-file-list>
<security-constraint>
<display-name>PDiX Portal</display-name>
<web-resource-collection>
<web-resource-name>PDX Portal Protected</web-resource-name>
<url-pattern>/jsp/*</url-pattern>
</web-resource-collection>
<web-resource-collection>
<web-resource-name>servlets</web-resource-name>
<url-pattern>/servlet/*</url-pattern>
</web-resource-collection>
<web-resource-collection>
<web-resource-name>GWT Resourcen</web-resource-name>
<url-pattern>/StandardPortal/*</url-pattern>
</web-resource-collection>
<web-resource-collection>
<web-resource-name>services</web-resource-name>
<url-pattern>/delegating/*</url-pattern>
</web-resource-collection>
<web-resource-collection>
<web-resource-name>ViewerServlet</web-resource-name>
<url-pattern>/frameset</url-pattern>
<url-pattern>/run</url-pattern>
</web-resource-collection>
<web-resource-collection>
<web-resource-name>EngineServlet</web-resource-name>
<url-pattern>/preview</url-pattern>
<url-pattern>/download</url-pattern>
<url-pattern>/parameter</url-pattern>
<url-pattern>/document</url-pattern>
<url-pattern>/output</url-pattern>
<url-pattern>/extract</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>authenticatedUser</role-name>
</auth-constraint>
形式 PDXRealm /jsp/login.jsp /logout.jsp?error=true 认证用户
[更新问题以反映与请求侦听器的连接]
【问题讨论】:
标签: java tomcat form-authentication j-security-check