对过期会话进行休息调用:HTTP 401 响应导致浏览器显示登录窗口

2024-05-09

我编写了一个 HTML 5 应用程序,它使用 AngularJS 并与在 Tomcat 上运行的 Java REST 后端进行交互。 我使用 Spring Security 来处理登录和安全性。

当用户进入网站时,他将被转发到登录页面,该页面创建会话并重定向到索引页面。 REST 调用从服务器加载更多数据,然后使用该会话进行身份验证。 如果没有适当的会话,我会回退到通过 HTTP 进行基本身份验证,这样就可以与 Web 应用程序分开调用 REST 端点。

我现在遇到的问题是会话何时过期。这会导致HTTP 401 Unauthenticated来自服务器的响应。我想我可以捕获该错误并使用 JavaScript 将用户重定向回登录页面。然而,在调用我的错误处理程序之前,浏览器首先显示一个登录窗口,只有当我单击“取消”时,我的 Javascript 错误处理程序才能处理响应。

我的问题是,有没有办法阻止浏览器显示此登录窗口?或者这是我的应用程序设计的普遍问题?

另一种选择可能是根本不使用会话并在应用程序中缓存用户名和密码。然后我需要使用基本身份验证在每个 REST 调用中发送它,这是更好的方法吗?

以下是来自服务器的 HTTP 响应:

HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
WWW-Authenticate: Basic realm="Spring Security Application"
Content-Type: text/html;charset=utf-8
Content-Length: 999
Date: Mon, 30 Sep 2013 11:00:34 GMT

Update:看来,造成这种情况的原因是WWW-Authenticateheader,这会导致浏览器显示登录对话框。


我终于找到了这个问题的解决方案。正如我在更新中提到的原因是,响应包含WWW-Authenticate标头字段。我的解决方案是更改 spring security 的配置以返回不同的标头:

WWW-Authenticate: FormBased

为此,我必须实施AuthenticaitonEntryPoint接口并手动设置响应中的标头和状态代码:

@Component( "restAuthenticationEntryPoint" )
public class RestAuthenticationEntryPoint implements AuthenticationEntryPoint {

    @Override
    public void commence( HttpServletRequest request, HttpServletResponse response,
                          AuthenticationException authException ) throws IOException {
        response.setHeader("WWW-Authenticate", "FormBased");
        response.setStatus( HttpServletResponse.SC_UNAUTHORIZED );
    }
}

然后我更改了 spring-security 的配置并设置entry-point-ref指向新类:

<http pattern="/rest/**" create-session="never" entry-point-ref="restAuthenticationEntryPoint">
    <intercept-url pattern="/rest/**" access="ROLE_USER" />
    <http-basic />
    <session-management />
</http>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对过期会话进行休息调用:HTTP 401 响应导致浏览器显示登录窗口 的相关文章

  • 在 JavaScript 中获取当前会话值?

    我有一个场景 我在浏览器中打开 Web 应用程序 但在两个单独的选项卡中 在一个选项卡中 我从应用程序注销 因此所有会话值都变为空 在另一个选项卡中 我单击了网络应用程序中的锚标记 在锚标记的 jquery on click 事件中 我检查
  • Blackberry 上的套接字连接比 http 更快吗?

    我正在为 Blackberry 编写一个应用程序 该应用程序最初是在标准 J2ME 中实现的 网络连接是使用完成的Connector open socket 80 代替http 现在 我已经使用这两种方法实现了连接 似乎有时 套接字方法响应
  • 以编程方式设置 Jetty GzipHandler

    我在玩码头GzipHandler它的工作方式似乎相当奇怪 它只压缩已经压缩的文件 我的整个设置是 GzipHandler gzipHandler new GzipHandler gzipHandler setHandler myHandle
  • 浏览器关闭后从数据库中删除

    我正在开发一个电子商务应用程序 但问题是 当用户将产品添加到购物车并在订购前关闭浏览器时 购物车会带走所有产品 所有购物车项目都保存在表中 如果用户关闭浏览器而不订购 我只想刷新购物车 您可以使用 Javascript 事件捕获浏览器关闭并
  • REST Content-Type:它应该基于扩展还是 Accept 标头?

    RESTful Web 服务返回的表示 html xml json 应该由 url 还是由 Accept HTTP 标头确定 两者都有效 引用自xml com http www xml com pub a 2004 08 11 rest h
  • 如何在 Spring 中的 Rest 模板标头中设置 NTLM 身份验证

    我想使用 Rest 模板对 NTLM 进行身份验证 有人可以建议一种方法吗 如果有人再次偶然发现此条目 这是内置解决方案 确保您的项目包括org apache httpcomponents httpclient 然后您可以使用以下代码片段构
  • 为什么Java配置后找不到这个Spring Security AuthenticationProvider?

    我正在整合春季安全Auth0 https github com auth0 spring security auth0使用 1 3 2 RELEASE BOM 进入 Spring Web 应用程序 我一直在使用提供的 auth0 secur
  • 在 Linux 中使用 --digest 选项通过curl 进行“摘要式身份验证”

    我正在尝试在Linux中使用curl更改基于Onvif的相机的日期 我已经在 C 中成功完成了此操作并使用摘要身份验证 但我陷入了这种情况 我正在使用以下命令 curl u admin admin digest http 10 104 37
  • ASP.NET 为什么会话超时,sessionstate超时设置

    嘿 我的 web config 中有以下行
  • 如何远程调试Lua?

    我正在寻找远程调试 Lua 的最佳方法 例如从网络浏览器 I saw RemDebug http www keplerproject org remdebug 但最后一次项目更新是在 2006 年完成的 它适用于 Lua 5 0 和 5 1
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • $_SESSION 中保存大量信息可以吗?

    我需要存储许多数组 SESSION以防止从 MySQL 检索信息 可以吗 其中 太多 的信息有多少 SESSION还是没有 太多 谢谢 附 或者更好地使用http php net manual en book memcache php ht
  • WCF 数据服务 (OData) 与 ASP.NET Web API

    我正在设计一个分布式应用程序 其中包含 RESTful 服务和各种客户端 Silverlight iOS Windows Phone 7 等 现在 我正在确定应该使用哪种技术来实现我的服务 WCF 数据服务 OData 或随 ASP NET
  • 在 C# 中解析 Json Rest api 响应[重复]

    这个问题在这里已经有答案了 我正在尝试使用 C 从 Rest api json 响应中提取值 我有以下代码 client BaseUrl https api cloud appcelerator com request Resource v
  • Spring Boot和OAuth2社交登录,无法获取refreshToken

    有一个如何使用 Spring 和 Spring Boot 实现 OAuth2 的指南https spring io guides tutorials spring boot oauth2 https spring io guides tut
  • 如何清除客户端.Net SSL会话缓存

    我正在编写一个小测试工具 它使用 HttpWebRequest 来负载测试服务器 我想要 每次我尝试调用 HttpWebRequest GetResponse 时 它都会建立一个新的 SSL 会话 而不是使用缓存中的会话 注意 我提供客户端
  • 我应该根据当前的内部 api 创建公共 api

    我的项目是拥有公共网站和内容管理系统 CMS 我正在使用 Lambda 和 API Gateway 作为 api CMS 当前有一个 api GET 请求来获取下表中的所有数据 横幅 表 属性 id 字符串 主键 分区键 标题 字符串 is
  • 获取请求,iOS

    我需要执行此 GET 请求 http api testmy co il api sync BID 1049 ClientCode 3847 Discount 2 34 Service 0 Items Name Tax Price 2 11
  • Tastypie:GET 的身份验证和 POST 的匿名

    我使用 Django Tastypie 来管理我的用户集合 是否可以允许匿名用户在 API 中发布 在某个端点创建新用户时 并限制经过身份验证的用户仅获取自己的用户 而不是所有用户 感谢您的帮助 我发现最简单的事情就是对我正在使用的身份验证
  • 如何使用 Python 从 URL 中删除查询字符串

    Example http example com a text q2 text2 q3 text3 q2 text4 删除后 q2 它将返回 http example com q text q3 text3 在这种情况下 出现了多个 q2

随机推荐

  • XAML 自定义文本框光标停留在输入开始处

    我正在致力于为 Windows 8 1 Universal UWP 的 XAML 应用程序创建自定义控件 并不断发现细微差别 我似乎找不到任何有关创建现有控件 如 TextBox 的自定义实现的优秀教程 因此我一直在浏览 Telerik 等
  • 流畅的 NHibernate 和 XML 列

    我正在从头开始构建一个新站点 并正在考虑使用 Fluent NHibernate 作为我的 ORM 我认为它可以轻松处理所有事情 可能除了我的 XML 列 我从来没有使用 NHibernate 构建过网站 尽管我使用过 Hibernate
  • 如何授权 Swagger 使用 MS Graph API

    我们正在为 MS Graph API 构建 Web API 包装器 我想使用 Swagger 来测试我的 API 但我无法正确配置 我不断收到错误请求 但没有其他线索 我无法在这台公司笔记本电脑上安装 Fiddler 或其他工具来帮助我进行
  • 在 Python 3 中动态导入模块的问题

    我遇到的情况是 在我的 Python 3 项目中 在运行时必须包含某些模块 我在用着importlib import module为了这 第二次更新 我确实找到了一种方法来做一些接近我想要的事情 一些额外的代码可能会使我的一些链接稍微偏离一
  • 如何使用 java/vb 脚本调用自定义 ActiveX dll 中的方法

    我使用 VB6 创建了一个 ActiveX dll 并使用打包和部署向导将其打包 生成了一个 cab 文件和一个演示 HTML 页面 此 ActiveX dll 包含一个 simgle 方法 该方法返回字符串且不接受任何参数 我遇到的麻烦是
  • PAM 在 C 中验证用户

    好吧 所以我是一个非常糟糕的编码员 我想知道 如标题所示 如何使用 C 语言通过 PAM 验证 Linux 用户 我唯一真正理解的是包括pam appl h and pam misc h我需要放置的头文件pam start and pam
  • 如何使用 Spring Security 跨多个基于 JVM 的应用程序实现单点登录

    我目前正在尝试跨多个基于 JVM Grails Servlet 的 Web 应用程序实现单点登录解决方案 这些应用程序目前都部署在同一个 servlet 容器 当前是 Tomcat 但不想将我的解决方案仅限于 Tomcat 中 所有 Web
  • 使用 Jest 和 Testbed 测试 Angular 9 服务

    在我的 Angular 9 项目中我添加了jest并删除Jasmine and Karma 我正在测试一项名为CorrectionService依赖于一个名为的服务RemoteService 我想监视RemoteService查看是否调用了
  • C# 中将一个字符串拆分为另一个字符串

    我一直在使用Split 分割字符串的方法 但这似乎仅在您按字符分割字符串时才有效 有没有办法分割一个string 另一个字符串是按参数分割的 我尝试将拆分器转换为字符数组 但没有成功 换句话说 我想分割string THExxQUICKxx
  • 如何使用 facebook API 在 javascript 中获取好友列表

    我不熟悉使用 Facebook Javascript SDK 我的故事是当我访问网站时它会在网页上显示我所有的朋友 照片和姓名 我注册了 Facebook API 和 App ID 我把网站网址设置为http 本地主机 81 http lo
  • 有条件填写 pandas 数据框

    我有一个数据框df列中包含浮点值A 我想添加另一列B这样 B 0 A 0 for i gt 0 B i if np isnan A i then A i else Step3 B i if abs B i 1 A i B i 1 lt 0
  • 将 PHP 变量保存到文本文件

    我想知道如何将 PHP 变量保存到 txt 文件 然后 再次检索它们 Example 有一个输入框 提交后写的东西 输入框将被保存到文本文件中 稍后需要结果 作为变量带回 假设变量是 text I 需要将其保存到文本文件并能够将其检索回来
  • 如何使用 Google Apps 脚本编辑现有的 Google 表单项(问题)

    我有一个谷歌脚本来构建谷歌表单 该脚本使用包含问题和相应选项的电子表格填写表单 表格中显示的问题需要定期更新 我希望通过更改电子表格中的问题来更新表单中的问题 如下所示 I use onOpen 对于脚本 以便每次访问表单时 脚本都会重建最
  • 获取单词中重复次数最多的字母的数量

    我正在尝试计算单词中重复次数最多的字母的数量 function GreatestCount str var count for var i 0 i
  • 如何在 Java 中安装附加包?

    我对 Java 很陌生 我想使用名为的包中的一些功能daj 教程代码有以下几行 import daj import java util import java lang Math import Msg 但第一行和第四行会产生红色下划线 导致
  • 生成 CloudFront 签名 URL 时性能缓慢

    我正在按照此示例使用 PHP 在 CloudFront 上创建签名 URLhttp docs aws amazon com AmazonCloudFront latest DeveloperGuide CreateURL PHP html
  • 等待 JavaScript 中 Json 调用完成

    我正在使用下面的json调用在我的 javascript 方法中 function go123 var cityName var temp getJSON https abc in api city callback args functi
  • 如何检索 jquery $.ajax 对象的responseJSON属性[重复]

    这个问题在这里已经有答案了 我有这个 JavaScript ajax ajax type GET url DBConnect php data dataType json success function data error functi
  • 从 JavaScript 中 Firebase 数据库的查询结果中获取特定子项的值

    我在 Firebase 上有这个示例数据库 样本数据库 我有一个index html 其中有这两个输入文本 div class login form h2 Login Form h2 div
  • 对过期会话进行休息调用:HTTP 401 响应导致浏览器显示登录窗口

    我编写了一个 HTML 5 应用程序 它使用 AngularJS 并与在 Tomcat 上运行的 Java REST 后端进行交互 我使用 Spring Security 来处理登录和安全性 当用户进入网站时 他将被转发到登录页面 该页面创