3

我有以下单点登录场景:

  1. 单击门户上的 Web 应用程序链接 (http) 获取 sso 集成页面。
  2. sso 集成页面在浏览器上出现了一段时间..然后它会自动 (http) 将数据发布到带有隐藏字段的网络应用程序
  3. Web 应用接收请求,从请求参数中提取用户信息
  4. Web 应用程序对 sso 集成进行 Web 服务调用以查看用户是否处于活动状态
  5. 在收到积极响应后,Web 应用程序显示页面。

我在 spring security 中使用扩展 AbstractPreAuthenticatedProcessingFilter 的 preauthentication 过滤器,我已经覆盖了这个函数:

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

在浏览器中刷新页面时,用户已登录并能够看到该页面。jsessionid 在刷新的情况下不作为 url 参数存在,但是当我使用第 2 行时,jsessionid 是否作为 url 参数存在?我无法理解这种行为。

4

0 回答 0