Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 身份验证单点登录spring_Java_Spring_Authentication_Spring Security_Pre Authentication - Fatal编程技术网

Java 身份验证单点登录spring

Java 身份验证单点登录spring,java,spring,authentication,spring-security,pre-authentication,Java,Spring,Authentication,Spring Security,Pre Authentication,我有以下单点登录场景: 单击门户(http)上web应用的链接以获取sso集成页面 sso集成页面在浏览器上出现一段时间。然后它会自动(http)将数据发布到带有隐藏字段的web应用程序 Web应用程序接收请求,从请求参数中提取用户信息 Web app向sso集成发出Web服务调用,以查看用户是否处于活动状态 收到肯定响应后,web应用程序显示页面 我在spring security中使用了一个扩展AbstractPreAuthenticatedProcessingFilter的预验证筛选器,我

我有以下单点登录场景:

  • 单击门户(http)上web应用的链接以获取sso集成页面
  • sso集成页面在浏览器上出现一段时间。然后它会自动(http)将数据发布到带有隐藏字段的web应用程序
  • Web应用程序接收请求,从请求参数中提取用户信息
  • Web app向sso集成发出Web服务调用,以查看用户是否处于活动状态
  • 收到肯定响应后,web应用程序显示页面
  • 我在spring security中使用了一个扩展AbstractPreAuthenticatedProcessingFilter的预验证筛选器,我在其中重写了此函数:

    protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
        String username = getUserName(request);  // Line1
       // String username = "userA";             // Line2 
        return username;                         // Line 3
    }
    
    函数getUserName执行步骤3和4

    当我使用第2行(而不是第1行)时,一切正常,用户可以看到web应用程序页面。 当我使用第1行并调试它时,用户名的提取与第2行相同,没有任何异常,但用户得到HTTP错误代码404。在第3行,两种方案具有相同的值

    我完全不知道为什么会发生这种情况,或者错误在哪里(有人能给我指一下正确的方向吗

    更新:我收到的Http 404响应如下:

    Response Headers    Value
    Set-Cookie  JSESSIONID=b8f8615855da6e92d780f12e2bbe; Path=/<webapp>; Secure; HttpOnly
    
    响应头值
    设置Cookie JSESSIONID=b8f8615855da6e92d780f12e2bbe;路径=/;安全;仅HttpOnly
    

    在浏览器中的页面刷新中,用户已登录并能够查看页面。刷新时,JSSessionID不作为url参数显示,但当我使用第2行时,JSSessionID作为url参数存在?我无法理解此行为。

    尝试将system.out打印出来,对于
    用户名
    ,我不知道这样做了多少次方法将在一个请求周期中被调用,您可能会看到
    userA
    在一些调用中被正确提取,而不是在其他调用中。我将sys.out.print放在一起,用户名只被打印一次。这个函数被调用一次。它应该被多次调用吗?对此不确定。那么您是说如果您给“userA”如果你给出
    getUserName(request)
    哪个
    .equals(“userA”)
    ,它就不起作用了?这是wierdYes它的wierd。我用更多信息更新了问题。当username从getUserName()返回时,它是否有一些尾随空格?