登录后Spring Security + Angularjs重定向

时间:2015-11-20 14:22:48

标签: angularjs spring-security

尝试使用本教程中的提示:https://spring.io/guides/tutorials/spring-security-and-angular-js/

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin().and()
            .logout().and().authorizeRequests()
            .antMatchers("/index.html", "/main.html", "admin.html",  
            "/login.html", "/")         
            .permitAll().anyRequest()
            .authenticated().and().csrf().disable();
    }

我也使用angularjs ngRoute:

var myApp = angular.module('myApp',['ngRoute']);

myApp.config(['$routeProvider',
    function($routeProvider) {
      $routeProvider
        .when('/', {
          templateUrl: 'main.html',
              controller: 'MainController'
        })
        .when('/admin', {
          templateUrl: 'admin.html',
              controller: 'AdminController'
        })
        .when('/login', {
          templateUrl: 'login.html',
          controller: 'LoginController'
        })
        .otherwise({
            redirectTo: '/'
        });
}]);

等等。

但是当我尝试打开管理页面(例如/#/ admin)时,它会打开登录表单(从框中),之后我希望它应该重定向我回到/#/管理员,但它将我重定向到/admin.html,这是在角度控制之外。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

要解决/错误重定向问题,您可以创建一个像这样的控制器

@Controller
public class ErrorController {


    @RequestMapping(value="/error")
    public String error() {
        return "forward:/index.html";
    }

}

从弹簧启动的角度来看,它应该始终落在index.html中,在那里你是"将控件赋予角度"

我假设你的资源文件夹结构如下 资源/静态/ index.html中

以便在访问root时呈现索引。

我的目录结构与教程上的目录结构不同,但它应该可以正常工作

刚刚明白你的问题是什么: 所以在你的角度配置中添加:

$locationProvider.html5Mode(true).hashPrefix('#');

并在index.htm中包含基本标记

  <base href="<!-- @echo BASE_URL -->" target="_blank">

这将摆脱&#39;#&#39; charecter,一切都应该工作

希望有所帮助

相关问题