在 Spring MVC 中导航 HTML 页面后,是不是有任何方法可以检查用户会话?

Posted

技术标签:

【中文标题】在 Spring MVC 中导航 HTML 页面后,是不是有任何方法可以检查用户会话?【英文标题】:Is there any way to check user session once authenticated on navigating HTML pages in Spring MVC?在 Spring MVC 中导航 HTML 页面后,是否有任何方法可以检查用户会话? 【发布时间】:2017-07-24 08:41:03 【问题描述】:

我有两个项目 - 一个用于 Java Spring Services,另一个用于 Web UI。

我已经准备好登录功能,因为我的视图在“html”扩展名中保存在完全不同的文件夹中

如何在浏览 HTML 页面时检查用户的会话/身份验证安全并让用户返回登录页面以防会话过期或没有成功的会议?

我不想遵循的方法:

我不想将我的 URL 与会话 ID 聚集在一起,除非没有更好的方法

我不想使用 Spring Security,我的视图设计在 HTML 和 AngularJS。

Cookie 再次不是一种安全的方法,因为任何人都可以获得所有信息 来自前端的 cookie。

【问题讨论】:

为什么你不依赖会话ID? 我不想将我的 URL 与长会话 ID 聚集在一起 【参考方案1】:

您需要在成功的用户身份验证后发送一个带有一些所需令牌的cookie。然后创建一个像/userAuth这样的服务,浏览器会自动将您的cookie(无论是sessionID,令牌等)信息附加到您的http请求中headers.根据您需要验证用户访问或授权的请求标头数据。 如果用户未被授权发送 401 作为状态,并且在你的角度 $http 失败方法上,你需要发出/广播一个注销事件以重定向到适当的页面。

【讨论】:

【参考方案2】:

您需要在 Spring 端设置一个 HandlerInterceptorAdapter 来检查登录状态并向 html 端返回错误代码。

Spring handlerInterceptorAdapter 可以配置为拦截您的所有控制器手有一个 preHeandle 方法,可用于检查用户会话或在您的应用程序无会话时登录用户。

那么你所有的 WS 都将得不到任何数据。

文档在这里

https://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-handlermapping-interceptor

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/handler/HandlerInterceptorAdapter.html

如果您也想保护页面,您可以在角度方面做一些工作,以避免页面 WS 返回正确的错误代码(用户未授权)时的可视化。或者您可以检查令牌或 cookie。

否则,您必须将模板及其访问权限置于 Spring Control 之下 以一种方式,您的拦截器将在为它们提供服务之前运行。

【讨论】:

以上是关于在 Spring MVC 中导航 HTML 页面后,是不是有任何方法可以检查用户会话?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring MVC 返回视频,以便可以使用 html5 <video> 标签进行导航?

Spring MVC + thymeleaf + html 在页面上无法获取session的值

Spring MVC 4 站点导航

MVC如何在页面之间导航时保​​持搜索值?

Spring MVC:JSP模板执行后获取文本

Spring REST-JWT-JavaScript 在安全页面之间导航