我最近使用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,我将获得工作页面。身份验证页面已通过,我不希望发生此行为。
我该怎么做?
请帮忙。
答案 0 :(得分:3)
AngularJS安全性应该在不同的级别上实现,并且可能需要稍微改变一下。因为它是基于AJAX的客户端框架,所以用户(黑客)可能会绕过您在客户端实现的每个安全措施。因此,应该在服务器端实现安全性。另一方面,您始终必须检查用户是否经过身份验证/授权访问服务器上的资源并实施适当的错误处理。
这意味着,在客户端,可能会被允许查看workPage - 但除非用户已登录,否则不应在那里呈现数据。
您的服务器应响应状态为401的所有未经授权的AngularJS AJAX请求,客户端应相应地处理该问题。
也请参阅this answer和this 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)
安全性必须在服务器端完成:
这意味着黑客可以看到你的“workPage”,但由于没有数据可以从服务器加载,他只是看到一个包含空数据的页面。
但是,使用Spring Security保护AngularJS应用程序并不像看起来那么简单,因为该框架首先不适用于这种用法。我花了很多时间来制作一个有效的应用程序,我建议你看一下它: