spring mvc + spring security + angularjs rounting integration

时间:2015-10-01 06:20:04

标签: angularjs spring spring-mvc spring-security integration

在我的项目中,我使用Spring MVC 4.1.6用于REST服务+ Spring Security 3.2.5用于身份验证和访问控制+ AngularJS用于单页应用程序样式前端。遇到路由集成问题。

我的登录页面路由有问题,它是作为主静态页面的AngularJS ng-view元素(因此它动态加载) =>很有说,它在AngularJS中有路线

$routeProvider.
    when('/', {
        templateUrl: '/view/Main.html',
        controller: 'MainController'
    }).
    when('/user-login', {
        templateUrl : '/view/user/user-login.jsp',
        controller : 'user-loginController'
    });

它也被定义为 Spring Security配置

中的登录URL
<context:annotation-config/>

<!-- enable use-expressions -->
<http auto-config="true" use-expressions="true">
    <headers>
        <cache-control />
    </headers>

    <intercept-url pattern="/api/admin**" access="hasRole('ROLE_ADMIN')"/>
    <intercept-url pattern="/api/items**" access="hasRole('ROLE_USER')"/>
    <intercept-url pattern="/user**" access="hasRole('ROLE_USER')"/>

    <!-- access denied page -->
    <access-denied-handler error-page="/403"/>

    <form-login
            login-processing-url="/login/processing"
            login-page="/user-login"
            default-target-url="/"
            authentication-failure-url="/user-login"
            username-parameter="username"
            password-parameter="password"
            authentication-success-handler-ref="successHandler"
            authentication-failure-handler-ref="failureHandler"/>
    <logout logout-success-url="/api/user-login?logout"  delete-cookies="JSESSIONID"/>
    <!-- enable csrf protection -->
    <csrf/>
</http>

所以,问题是: 登录页面工作正常。但是,当reuqest由Spring安全配置处理时(例如

  <intercept-url pattern="/user**" access="hasRole('ROLE_USER')"/>

并且用户没有此角色,它被重定向到登录页面'/ user-login'。但是,在这种情况下,发生了一些路由冲突,我得到'ERR_TOO_MANY_REDIRECTS'。浏览器出错,并且不断将我重定向到'/ user-login'页面,如20-30次。

任何想法,如何解决这个冲突?我试图为'用户登录'制作空的Spring控制器,但它没有帮助

@RequestMapping(value = "user-login", method = RequestMethod.GET)
public String displayLoginPage() {
    return null;
}

我唯一的想法是将登录页面与单页应用程序分开,不使用角度路由,但这不是一个好的选择。

0 个答案:

没有答案