在我的项目中,我使用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;
}
我唯一的想法是将登录页面与单页应用程序分开,不使用角度路由,但这不是一个好的选择。