Java Ionic with Tomcat-成功登录,但未注入主体

Java Ionic with Tomcat-成功登录,但未注入主体,java,spring,cordova,tomcat,ionic-framework,Java,Spring,Cordova,Tomcat,Ionic Framework,嗯,我有一个棘手的问题,但希望有人能给我指出一个足够简单的方向,因为谷歌并没有真正的帮助 我有以下体系结构: 服务器端:带有Tomcat容器的Java Spring MVC服务器-表单身份验证(通过j_安全检查)与自定义DataSourceALM,在成功身份验证后,它向GenericPrincipal注入额外的会话特定数据(自定义Principal类) 客户端:在Chrome和Android 5.0设备上运行AngularJS 1.5的离子混合应用程序 (注意:有一个不同的web应用程序也在同一

嗯,我有一个棘手的问题,但希望有人能给我指出一个足够简单的方向,因为谷歌并没有真正的帮助

我有以下体系结构:

  • 服务器端:带有Tomcat容器的Java Spring MVC服务器-表单身份验证(通过j_安全检查)与自定义DataSourceALM,在成功身份验证后,它向GenericPrincipal注入额外的会话特定数据(自定义Principal类)
  • 客户端:在Chrome和Android 5.0设备上运行AngularJS 1.5的离子混合应用程序
  • (注意:有一个不同的web应用程序也在同一台服务器上工作,并且运行正常)

    当在Chrome中使用
    --禁用web安全性
    进行模拟时,该应用程序运行正常,但当它在设备本身上运行时,会出现异常症状:

  • j_security_check正确记录用户日志,并在authenticate方法结束时生成完整、正确的主体对象
  • 对服务器的后续请求被路由到正确的Spring控制器,但在检查请求对象时,主体对象和请求的
    authType
    参数都是
    null
    (与GenericPrincipal和“FORM”实例的正确值形成对比),分别-当从浏览器或web应用程序请求时)
  • 其他信息(四处搜索一点…):

  • withCredentials=true在AngularJS配置中设置
  • CORS过滤器设置为Tomcat提供的过滤器(具有许可设置),并且在客户端配置中,原点设置为
    *
  • CSP设置为许可设置:
    ,允许使用许可配置进行导航:
    ,并添加cordova白名单插件

  • 你知道什么可能会导致实际登录成功(所以不是CORS)、加载和执行内容(所以不是CSP)以及请求路由正确(所以不是Spring),但Tomcat无法将会话注入请求吗?

    好吧,经过一些进一步的刺激和思考,这个问题是
    JSESSIONID
    不是在
    j_security_check
    身份验证调用之前生成的,而是在该调用之后生成的,因此没有选择检索原始会话登录名-后续调用的标识符不充分/不正确

    这个链接非常有用:

    TL;DR版本是默认情况下不会自动创建
    JSESSIONID
    ——您必须执行以下一项或多项操作:

  • 相应地配置您的服务器
  • 在服务器代码中手动调用
    request.getSession()
    request.getSession(true)
  • 获取JSP页面(那里有一个隐式的
    request.getSession()
    ,除非您指示它以其他方式运行)

  • 用理论解释很难理解确切的问题。其次,你提到了一个设备,这意味着什么,你有一些Android应用程序,你有问题吗?如果它是一个应用程序,那么你必须为每个请求向服务器发送JSESSIONID。我想详细说明一下,告诉我你想知道什么-只是尽量简洁,不要在这里转储所有配置(可能大多数配置都不相关)。是的,正如我提到的——安卓5.0设备。发送JSESSIONID-在Chrome中模拟时,所有JSESSIONID转换都是正确的;当在设备上运行时-JSESSIONID存在,但我不确定如何检查它是否正确(无论如何-它只是HttpOnly,所以不是我应该手动设置的东西)-也许WebView或Tomcat有一些故障,但不确定如何测试它…我不认为Tomcat有什么问题。无论如何,您是否可以发布将cookie(即JSESSIONID)发送到服务器的代码。通过在Angular config中指定此代码:
    $httpProvider.defaults.withCredentials=true没有对cookies进行任何其他篡改-无论如何,我不能访问HttpOnly cookies。对不起,我听不懂你说的话。我希望有更好的人帮助你。祝你好运…-)