Angularjs和安全问题

时间:2013-12-20 07:06:27

标签: angularjs spring-mvc

我最近使用Angularjs和spring mvc实现并应用了它。 一切都很好。在我的实现中,我有路由提供程序,它将流程重定向到服务器。

以下是我的路线提供者代码

angularApp.config([ '$routeProvider', function($routeProvider) {
$routeProvider.when('/', {
    templateUrl : 'authenticate.do',
    controller : 'DecideRoamingFlowController'
}).when('/homePage', {
    templateUrl : 'home.do',
    controller : 'HomeController'
}).when('/workPage', {
    templateUrl : 'work.do',
    controller : 'WorkController'
}).when('/auth', {
    templateUrl : 'work.do',
    controller : 'WorkController'
}).otherwise({
    redirectTo : '/'
});

我的网址模式类似于

http://localhost:8080/angularapp/landing.do#/homePage

我的流程来自主页用户输入他的凭证进行验证,验证后他应该被重定向到workPage。

我担心的是,如果我在地址栏中手动将url的值从homePage更改为workPage,我将获得工作页面。身份验证页面已通过,我不希望发生此行为。

我该怎么做?

请帮忙。

3 个答案:

答案 0 :(得分:3)

AngularJS安全性应该在不同的级别上实现,并且可能需要稍微改变一下。因为它是基于AJAX的客户端框架,所以用户(黑客)可能会绕过您在客户端实现的每个安全措施。因此,应该在服务器端实现安全性。另一方面,您始终必须检查用户是否经过身份验证/授权访问服务器上的资源并实施适当的错误处理。

这意味着,在客户端,可能会被允许查看workPage - 但除非用户已登录,否则不应在那里呈现数据。

您的服务器应响应状态为401的所有未经授权的AngularJS AJAX请求,客户端应相应地处理该问题。

也请参阅this answerthis answer

答案 1 :(得分:0)

当您使用spring mvc时,最好使用spring security,它负责身份验证,成功/失败时重定向以及基于角色。

Angular Way:您可以使用事件监听器

      $rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState,              fromParams) { // Keep listening for the events and validate .. }

答案 2 :(得分:0)

安全性必须在服务器端完成:

  • 客户端的所有内容都不受保护
  • 您必须使用Spring Security
  • 之类的东西来保护您的REST端点

这意味着黑客可以看到你的“workPage”,但由于没有数据可以从服务器加载,他只是看到一个包含空数据的页面。

但是,使用Spring Security保护AngularJS应用程序并不像看起来那么简单,因为该框架首先不适用于这种用法。我花了很多时间来制作一个有效的应用程序,我建议你看一下它:

https://github.com/jhipster/jhipster-sample-app