2015-11-20 126 views
0

試圖用思想從本教程:https://spring.io/guides/tutorials/spring-security-and-angular-js/的Spring Security + Angularjs重定向登錄後

@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.html,它不在角度控制範圍內。

如何解決這個問題?

回答

0

爲了解決/錯誤重定向你可以創建這樣

@Controller 
public class ErrorController { 


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

} 

從彈簧引導角度來看,它應該始終落在index.html的你在哪裏「給控制角」

控制器

我假設你的資源文件夾結構如下 resources/static/index.html

這樣索引就會在訪問root時被渲染。

我的目錄結構是不是在教程的一個diffent但它應該工作

就明白了你的問題是什麼: 所以在你的角度配置補充一點:

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

和索引熱媒包括基本標籤

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

這將擺脫「#」性格特徵的,一切都應該工作

希望它有幫助

+0

對不起,也許我不明白的東西,但Spring Boot給這個解決方案錯誤:「已經有'ErrorController'的bean方法。當然,我自己編寫的ErrorController沒有其他方法,這就是爲什麼它表示它是控制/ error錯誤的框中的Security bean。我理解對嗎? –

+0

剛編輯我的回覆,我認爲你的問題是在角度配置 – jstuartmilne

相關問題