在AngularJS网络应用程序中,如何显示403 http响应的自定义错误消息/页面。
我使用Spring安全性并检查用户是否具有适当的角色......如果他没有该角色,则应用程序返回http错误代码403.
目前我没有在这种情况下显示任何错误消息/页面。并希望实现这一点。我们怎么做到这一点?
Spring启动java代码
http.httpBasic()
.and()
.authorizeRequests()
// Permit these resources
.antMatchers("/login", "/4_security/login.html", "/bower_components/**", "/4_security/*.js", "/")
.permitAll()
// URL based Authorization control
.antMatchers("/1_reportingEntities/*.html").hasAnyAuthority(authorities)
// All other requests needs authentication
.anyRequest().authenticated()
// Access denied page (403 error)
.and().exceptionHandling().accessDeniedPage("/0_common/accessDenied.html")
.and()
// CSRF protection
.csrf().csrfTokenRepository(csrfTokenRepository()).and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class);
答案 0 :(得分:2)
首先,您可以使用http拦截器拦截所有响应。
然后,如果您使用的是ui-router,您可以创建一个单独的未授权状态(使用apt视图和控制器)并在403上转换到该状态,如下所示
.factory('authHttpResponseInterceptor',['$q','$location','$injector',function($q,$location, $injector){
return {
responseError: function(rejection) {
if (rejection.status === 403) {
console.error("Response 403 in interceptor");
$injector.get('$state').go('unauthorised');
}
return $q.reject(rejection);
}
PS:我们不能在拦截器中注入$ state,因为它会导致循环依赖。所以使用$ injector。 有关此here
的更多信息答案 1 :(得分:1)
您可以使用http拦截器过滤响应并显示自定义消息。这里有一个好的:https://github.com/witoldsz/angular-http-auth