没有jsp的java Spring安全性
我将在我的Javascript前端+Spring MVC项目(一个用户管理web应用程序)中使用Spring安全性。我试图弄清楚,将这些前端html代码(尤其是在与后端代码位于同一服务器的jsp文件中)放在同一服务器中是否有任何安全好处,这样我就可以利用某些jsp标记。或者我可以把它完美地变成一个ajax应用程序,在不同的服务器上为前端服务。而且仍然充分使用spring security
你可以在下面搜索框中键入要查询的问题!
我将在我的Javascript前端+Spring MVC项目(一个用户管理web应用程序)中使用Spring安全性。我试图弄清楚,将这些前端html代码(尤其是在与后端代码位于同一服务器的jsp文件中)放在同一服务器中是否有任何安全好处,这样我就可以利用某些jsp标记。或者我可以把它完美地变成一个ajax应用程序,在不同的服务器上为前端服务。而且仍然充分使用spring security
# 1 楼答案
您可以使用Spring Security来保护服务器端的安全,这意味着您的问题的简短答案是:“我能完美地将其变成ajax应用程序吗[…]?”对
对于Ajax应用程序,我的建议是使服务器端成为RESTful API,因此我假设情况就是这样
有两个因素有助于“安全”:身份验证和授权
身份验证意味着客户端提供一些凭证(例如密钥、OAuth令牌、用户/密码组合),使您确信他或她确实是他们声称的那个人(即用户id 12345)。此身份验证将作为会话的一部分由应用程序保留。由于Http是无状态的,因此每个向服务器发出的后续请求都需要发送所述会话的标识,以便服务器可以查找它。您可以找到here所有您需要了解的关于Spring Security身份验证的信息。如果不知道你的用户计划如何进行身份验证,我就不能说得更具体了
授权更简单:用户id 12345可能无法访问所有内容。例如,他可以访问
/widgets/gidgets
,但不能访问/widgets/fidgets
。要实现这一点,最简单的方法是通过@PreAuthorize
注释。了解更多信息here。例如:这在幕后的作用是,它根据路径拦截请求,验证当前已验证的用户是否具有与您指定的名称相同的角色,并允许在肯定的情况下执行该方法。否则,它将完全跳过方法执行,并向客户端返回401个未经授权的响应
# 2 楼答案
这里我假设:
从安全角度来看,spring security只能保护后端应用程序,您应该记住前端安全性(在浏览器视图中隐藏链接或命令)只是一种错觉,因为用户总是可以伪造请求,甚至是Ajax请求
从用户体验的角度来看,很明显,你永远不应该向用户展示这种可能性,当用户使用它时,告诉他不允许这样做。因此,前端必须知道授予用户的权限。Spring security附带了一些标签,可以在JSP页面的服务器端使用,但对于Javascript前端,您可以(应该?)使用这些标签实现一个特殊的URL服务器端,返回当前用户的能力,在用户通过身份验证后立即在此处发送请求,并将结果缓存到客户端会话(
Windows.sessionStorage
)。这样,javascript代码就知道应该向特定用户显示什么# 3 楼答案
您可以使用spring安全性来保护在控制器中提供AJAX JSON调用级别的请求URL,这就是我的建议
无论您如何在JS前端显示/隐藏功能、数据等,重要的是保护提供功能和数据的JSON调用。这样,即使最终用户试图入侵你的前端(他们可能会,因为这很容易),也要确保他们会因为缺乏访问权限而无法执行REST调用
关于“你能”让这个和使用JSP标签相比更安全吗?绝对-确保您在通话级别的所有安全性都按上述方式得到了正确处理,您将被设置。您应该像构建单独的应用程序一样构建REST/JSON服务,该应用程序可以用于任何类型的前端