环境:
从IBM MobileFirst Platform Developer Center下载form-based sample。
在MFP 6.3 Studio中,样本运行正常。
然后我更改了我的构建设置和构建所有环境 - >获取新的wlapp文件。
我从MFP 6.3服务器获取war文件。打开并输入修改后的authenticationConfig.xml 基本上它只是将一个片段从studio authenticationConfig.xml传输到WAR文件中的xml文件。
<customSecurityTest name="DummyAdapter-securityTest">
<test isInternalUserID="true" realm="SampleAppRealm"/>
</customSecurityTest>
我重新启动服务器并部署.wlapp和.adapter文件。
在独立服务器中,我运行预览模式。我输入用户名和密码并登录。它没有登录,我在服务器console.log上看到了这些错误。
[ERROR ] SESN0008E: A user authenticated as anonymous has attempted to access a session owned by user:BasicRegistry/demo.
[ERROR ] SRVE0232E: Internal Server Error. Exception Message: [com.ibm.ws.webcontainer.webapp.WebAppErrorReport: com.ibm.websphere.servlet.session.UnauthorizedSessionRequestException: SESN0008E: A user authenticated as anonymous has attempted to access a session owned by user:BasicRegistry/demo.
at com.ibm.ws.webcontainer.session.impl.HttpSessionContextImpl.checkSecurity(HttpSessionContextImpl.java:686)
at [internal classes]
at com.worklight.core.auth.impl.AuthenticationFilter.associateAuthContextWithThread(AuthenticationFilter.java:426)
at com.worklight.core.auth.impl.AuthenticationFilter.doFilter(AuthenticationFilter.java:145)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194)
at [internal classes]
Caused by: com.ibm.websphere.servlet.session.UnauthorizedSessionRequestException: SESN0008E: A user authenticated as anonymous has attempted to access a session owned by user:BasicRegistry/demo.
... 7 more
]
[ERROR ] SRVE0777E: Exception thrown by application class 'com.worklight.core.auth.impl.AuthenticationContext.checkAuthentication:604'
com.worklight.server.auth.api.WorkLightAuthenticationException
at com.worklight.core.auth.impl.AuthenticationContext.checkAuthentication(AuthenticationContext.java:604)
at com.worklight.core.auth.impl.AuthenticationContext.processRealms(AuthenticationContext.java:469)
at com.worklight.core.auth.impl.AuthenticationContext.pushCurrentResource(AuthenticationContext.java:443)
at com.worklight.core.auth.impl.AuthenticationServiceBean.accessResource(AuthenticationServiceBean.java:75)
at com.worklight.integration.services.impl.DataAccessServiceImpl.invokeProcedureInternal(DataAccessServiceImpl.java:430)
at com.worklight.integration.services.impl.DataAccessServiceImpl.invokeProcedure(DataAccessServiceImpl.java:139)
at com.worklight.gadgets.serving.handler.BackendQueryHandler.getContent(BackendQueryHandler.java:95)
at com.worklight.gadgets.serving.handler.BackendQueryHandler.doPost(BackendQueryHandler.java:56)
at com.worklight.gadgets.serving.GadgetAPIServlet.doGetOrPost(GadgetAPIServlet.java:148)
at com.worklight.gadgets.serving.GadgetAPIServlet.doPost(GadgetAPIServlet.java:108)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1240)
at [internal classes]
at com.worklight.core.auth.impl.AuthenticationFilter$1.execute(AuthenticationFilter.java:217)
at com.worklight.core.auth.impl.AuthenticationServiceBean.accessResource(AuthenticationServiceBean.java:76)
at com.worklight.core.auth.impl.AuthenticationFilter.doFilter(AuthenticationFilter.java:222)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194)
at [internal classes]
答案 0 :(得分:3)
在研究了securityIntegrationEnabled =&#34;错误的解决方法之后,我想我已经弄清楚了为什么工作正常/无效。
解决方案实际上非常简单,无需更改server.xml。
当出现错误SESN0008E时,我通过单击独立服务器中管理控制台的链接,使用通用预览模式测试FormAuth应用程序。尽管常见预览链接已打开到新浏览器,但sessionID实际上仍然存在。两个浏览器选项卡都在同一个会话中(我已选中)。
这意味着我使用的sessionID实际上是管理控制台已经过身份验证的会话ID。在我的预览模式中,我尝试在已经拥有&#34;拥有的会话中再次进行身份验证。由另一个用户。这会导致WAS抛出错误SESN0008E:以匿名身份验证的用户尝试访问用户拥有的会话:BasicRegistry / demo。我的应用预览与管理控制台位于同一个httpsession中,因此出现错误。
为了让它工作,我复制了预览链接。关闭所有浏览器以确保会话被终止。打开一个新浏览器,粘贴预览链接,FormAuthentication现在可以使用。
可能更方便的解决方案是创建移动Web环境并将其用于预览测试。
答案 1 :(得分:0)
在WAS和WAS Liberty配置文件中,默认情况下启用安全集成。这也意味着:
...会话管理工具将用户的身份与 他们的HTTP会话。此功能会将会话标记为“拥有” 访问尚未标记为的会话的第一个用户 拥有。
如果会话已标记为已拥有,则会检查该会话 所有者与当前用户相同。如果没有,而不是 授予对会话的访问权限,至少具有标识符的消息 将记录SESN0008E并且不会访问会话 理所当然的。
在某些情况下,会出现UnauthorizedSessionRequestException 抛出,消息SESN0008E为原因。
在Eclipse的MobileFirst Development Server中,底层WAS Liberty的server.xml已禁用此功能。
对于POC作为解决方法,您可以通过在server.xml文件中添加以下条目来禁用该功能:<httpSession securityIntegrationEnabled="false"/>
请注意,添加此设置对所有应用程序都是全局的,如果存在,可能会对服务器上的现有应用程序产生负面影响。