我将在我的Javascript前端+ Spring项目(一个用户管理管理web应用程序)中使用Spring安全性,我试图弄清楚,将这些前端html代码(特别是在与我的后端代码相同的服务器中的jsp文件中)放置是否有什么安全好处,这样我就可以利用某些jsp标记。或者,我可以把它完美地变成一个ajax应用程序,在另一个服务器中为前端服务。还能充分利用春天的安全吗?
发布于 2016-08-16 08:13:15
在这里,我假设:
从安全性的角度来看,spring安全性只能保护后端应用程序,而且您应该记住前端安全性(在浏览器视图中隐藏链接或命令)只是一种错觉,因为用户总是可以伪造请求,甚至是Ajax请求。
从用户体验的角度来看,很明显,你永远不应该向你的用户展示一种可能性,当他使用它时,告诉他他是不被允许的。因此,您的前端必须知道授予用户什么特权。Spring安全性附带了一些在JSP页面中可以使用的服务器端标记,但是对于Javascript前端,您可以(应该吗?)实现一个特殊的URL服务器端,该服务器端返回当前用户的功能,在用户通过身份验证后立即在这里发送请求,并在客户端会话(Windows.sessionStorage)中缓存结果。这样,您的javascript代码就知道应该向特定用户显示什么。
发布于 2016-08-23 14:23:38
您可以使用spring安全性来保护在控制器中提供AJAX调用级别的请求URL,这就是我的建议。
不管您如何在JS前端显示/隐藏特性、数据等,重要的是保护提供特性和数据的JSON调用的安全。这样,即使最终用户试图黑进您的前端(他们可能会,因为这很容易),确保他们将在执行REST调用失败,因为缺乏访问。
您的问题是“您可以”使用JSP标记使此安全吗?绝对-确保您在调用级别上的所有安全性都像上面所描述的那样得到了正确的处理,并且您将被设置。您应该像构建单独的应用程序一样构建REST/JSON服务,可以在任何类型的前端中使用。
发布于 2016-08-26 13:02:49
您可以使用Security来保护您的服务器端,这意味着您的问题是:“我能完美地使它成为一个ajax应用程序吗?”是。
对于Ajax应用程序,我的建议是将服务器端设置为RESTful API,因此我假设情况就是这样。
有两个有助于“安全”的元素:身份验证和授权。
身份验证意味着客户端提供一些凭据(如密钥、OAuth令牌、用户/密码组合),使您确信他或她确实是他们声称的身份(即用户id 12345)。此身份验证将由应用程序作为会话的一部分保存。由于Http是无状态的,因此对服务器的每个后续请求都需要发送所述会话的标识,因此服务器可以查找该会话。您可以找到关于Security身份验证的所有需要了解的这里。不知道您的用户计划如何进行身份验证,我就不能说得更具体了。
授权更为简单:用户id 12345可能无法访问所有内容。例如,他可以访问/widgets/gidgets,但不能访问/widgets/fidgets。要实现这一点,最简单的方法是通过@PreAuthorize注释。这里,了解更多关于它的信息。一个例子如下所示:
@RestController
@RequestMapping("/widgets")
public class WidgetController{
@RequestMapping("/gidgets")
@PreAuthorize("hasRole('GIDGET_MANAGER')")
List<Gidget> getGidgets(){
return gidgetService.getGidgets();
}
@RequestMapping("/fidgets")
@PreAuthorize("hasRole('FIDGET_MANAGER')")
List<Fidget> getFidgets(){
return fidgetService.getFidgets();
}
}这在幕后所做的是,它根据路径拦截请求,验证当前通过身份验证的用户是否具有指定名称的角色,并允许在肯定情况下执行该方法。否则,它将完全跳过方法执行,并向客户端返回401未经授权的响应。
https://stackoverflow.com/questions/38969000
复制相似问题