Java Spring安全性:restful web服务和维护用户会话

Java Spring安全性:restful web服务和维护用户会话,java,ajax,spring,spring-security,spring-rest,Java,Ajax,Spring,Spring Security,Spring Rest,在经典的jsp或php应用程序中,用户会话可以通过以下过程进行维护 1) 首次访问资源时,向用户挑战使用用户ID和密码进行身份验证。 2) 如果凭据正确,则成功验证用户并创建会话id 3) 将sessionid附加到标头,并将响应连同请求的信息发送回用户。 4) 在用户的后续请求中,服务器将在标题中检查有效的sessionid 5) 如果sessionid有效且未过期,则无需进行身份验证,并且允许用户执行请求的操作 上面的要点是用户只需输入一次凭据 但是如何在rest完整设计中实现这一点,其中资

在经典的jsp或php应用程序中,用户会话可以通过以下过程进行维护
1) 首次访问资源时,向用户挑战使用用户ID和密码进行身份验证。
2) 如果凭据正确,则成功验证用户并创建会话id
3) 将sessionid附加到标头,并将响应连同请求的信息发送回用户。
4) 在用户的后续请求中,服务器将在标题中检查有效的sessionid
5) 如果sessionid有效且未过期,则无需进行身份验证,并且允许用户执行请求的操作

上面的要点是用户只需输入一次凭据

但是如何在rest完整设计中实现这一点,其中资源是通过ajax/jquery调用访问的。与经典JSP一样,如果我希望用户只输入一次凭据,那么如何实现这一点(至少我不知道如何使用ajax请求将头(即sessionid)传递到服务器)


我正在使用spring restful web服务api和spring安全性——即委托具有基本身份验证的过滤器代理(spring安全过滤器链)。我希望用户只需输入一次凭据即可登录,随后对服务器上restful资源的ajax请求应该能够自动发现用户最近登录,并且应该允许用户在需要重新验证的情况下对restful资源执行请求的操作。

首先,您需要配置
Spring-Security
,这样就涵盖了您的
restapi
,下面是一个如何实现这一点的示例-

保持用户身份验证的方法之一是将会话id存储在Cookie或任何其他存储中,这样后端就可以对其进行验证。在后端,
restapi
应该是无状态的。所以,最好的方法是在某些会话表的数据库中保留会话id(
Redis
是这种情况下的常用解决方案)


如果您想设计一个
restapi
,我将在头中发送会话id,正如您在每次
AJAX
调用中所解释的那样。一个API方法应该对用户进行身份验证,并提供令牌(或会话id),该令牌应由客户端存储在某个地方(例如,在cookie中)。所有其他方法都应该要求它能够访问资源。当用户注销时,该值应被删除,用户应无法访问资源。

这与我的预期非常接近。“正如您在每次AJAX调用中所解释的那样,我会在标题中发送会话id。”任何关于如何通过AJAX/jquery实现这一点的小代码片段。我认为提供代码是没有意义的,因为示例不够小。您只需要将其添加为http请求中的标头。