HTTP基本身份验证(Java/Jersey)

HTTP基本身份验证(Java/Jersey),java,web-services,rest,security,Java,Web Services,Rest,Security,我创建了restwebservice,并使用httpbasic身份验证对其进行了保护 它工作正常,要求输入用户名/密码。 但在第二次运行时(如果浏览器仍然打开),Web服务不会要求提供用户名/密码。若我关闭并重新打开浏览器,它将按我所希望的方式工作—请求验证 我希望webservice在每次运行时询问用户名/密码(无论其他网页是否打开) 你知道我该怎么做吗?没有办法解决这个问题:浏览器会向用户发送每个请求,直到你关闭它。这是因为基本身份验证方案是一个方案 一旦通过身份验证,浏览器将在后续请求中自

我创建了
restwebservice
,并使用
httpbasic身份验证对其进行了保护

它工作正常,要求输入
用户名/密码
。 但在第二次运行时(如果浏览器仍然打开),Web服务不会要求提供
用户名/密码。若我关闭并重新打开浏览器,它将按我所希望的方式工作—请求验证

我希望webservice在每次运行时询问用户名/密码(无论其他网页是否打开)


你知道我该怎么做吗?

没有办法解决这个问题:浏览器会向用户发送每个请求,直到你关闭它。

这是因为基本身份验证方案是一个方案

一旦通过身份验证,浏览器将在后续请求中自动包含凭据。防止这种情况发生的唯一方法是打开匿名会话或关闭浏览器。这些身份验证方案容易受到攻击


正如我在回答中所讨论的那样,还有其他原因使您更喜欢其他身份验证方案而不是基本身份验证。

可能您的浏览器正在缓存凭据否?这可能没什么好担心的。使用HTTP Basic,Web服务的客户端必须使用用户名和密码对每个请求进行身份验证。尝试使用REST客户端(如Postman,而不是浏览器)测试您的服务,以查看其行为。正如Blackus所说,您的浏览器可能只是在缓存凭据,但这并不意味着它们不会每次都被发送。您可以编写单元测试用例以确保相同。如果您从基本身份验证转向某种自定义策略,浏览器将无法通过自动填充凭据来“帮助”用户。可能在表单字段或自定义标题中传递uname/pwd?