我一直在使用不同的客户端技术,如AngularJS,EmberJS,甚至尝试使用直接的JQuery,并弄清楚如何使用它的ReactJS。除此之外,我的目标是在客户端和Java Jersey 2 jax-rs后端api之间使用json构建单页面应用程序。
我现在有两个绊脚石。虽然有些信息......我正在将我的应用程序部署为Jetty中的WAR文件。我的后端是基于java的。到目前为止,我只在客户端使用jquery。
我的主要障碍是如何处理登录,注销和会话管理。使用rest API并使用ajax,我登录工作,包括设置cookie。我关心的是单页应用程序,只有一个索引页面,如果用户关闭浏览器,然后重新打开它到索引页面,而cookie / session仍然是好的,用户应该登录,而不是看到外面(未登录)页面。我不确定如何处理这个问题,无论是jsp页面,带有一些模板库的index.html等等。使用JSP我可以插入一些scriplet代码(反对我更好的判断)。在过去,我会包含一个标题,用于检查request.getSession()。getAttribute(“user”),如果它在那里......用户登录并使用scriplet if()代码我会显示一个登录标题,而不是未登录的标头。但我相信,必须有一个更好的方法来实现今天的客户端JS框架。
另一个绊脚石是导航和动态方面。例如,当我使用角度js时,使用Welcome {{name}}并在范围内替换name以及登录用户的json响应值是很容易的。在我目前的情况下,我不确定如何最好地使用纯jquery显示这样的动态位,而不是使用某种$(“#elem-id”)。响应中的内部HTML =“...”代码ajax调用的成功方法。同样,我不太确定如何处理导航到不同的页面。我登录的网站将有一些下拉菜单或链接,将用不同数量的内容替换内容区域。
首先,在页面重新加载或关闭/崩溃浏览器重启的情况下,SPA中有哪些方法可以处理用户会话...以确保用户仍然登录并将其指向正确的页面?其次,存在哪种模板和路由/导航选项,不需要我在我的一个index.jsp页面中放入大量代码?
谢谢。
答案 0 :(得分:20)
如果您使用REST API作为后端,那么您必须已将oAuth实现为身份验证机制。也就是说,当您的用户使用用户名和密码登录时,您将使用身份验证令牌交换该数据。每次API调用都会向您的服务器发送此身份验证令牌,并且您的后端会在为请求提供服务之前验证此令牌。到目前为止清楚了吗?
您可以做的是,当您获得访问令牌时,您还可以从服务器获取访问令牌到期时间并将该数据存储在客户端应用程序中。在localStorage也许?当您的用户关闭浏览器并再次重新打开时,您可以在要求用户登录之前先检查此类访问令牌是否可用(并且未过期)。这应该可以解决您的第一个问题。
其次,如果您正在寻找轻量级路由选项,我建议director。
答案 1 :(得分:1)
我正在构建一个类似的应用程序。 OAuth不是强制性的。您可以通过点击泽西登录端点并设置会话和cookie来进行正常会话等#34; keepme"如果用户想要持久登录,则使用会话。然后,您可以使用球衣AuthFilter检查是否存在具有有效会话或活动会话的cookie并保持用户登录。
您的前端应用程序应该对此没有发言权,只是与服务器通信,如果它没有未经授权的访问(来自AuthFilter),则继续,否则它会显示登录页面。