我有以下单点登录场景:
- 单击门户上的 Web 应用程序链接 (http) 获取 sso 集成页面。
- sso 集成页面在浏览器上出现了一段时间..然后它会自动 (http) 将数据发布到带有隐藏字段的网络应用程序
- Web 应用接收请求,从请求参数中提取用户信息
- Web 应用程序对 sso 集成进行 Web 服务调用以查看用户是否处于活动状态
- 在收到积极响应后,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 参数存在?我无法理解这种行为。