Angularjs 关于Springboot安全,返回UI内的登录页
我正在对Springboot控制器进行Rest调用,并具有安全配置,需要授权和角色才能访问特定URLAngularjs 关于Springboot安全,返回UI内的登录页,angularjs,spring-boot,spring-security,Angularjs,Spring Boot,Spring Security,我正在对Springboot控制器进行Rest调用,并具有安全配置,需要授权和角色才能访问特定URL http.authorizeRequests() .antMatchers("/api/admin/**").access("hasRole('Admin')") // .antMatchers("/api/user/**").hasAnyRole("Admin"
http.authorizeRequests()
.antMatchers("/api/admin/**").access("hasRole('Admin')") //
.antMatchers("/api/user/**").hasAnyRole("Admin","User")
//.antMatchers("/api/user/**").access("hasRole('User')")
//.and().logout()
.and().formLogin()
.loginPage("/login").usernameParameter("userName").passwordParameter("password")
现在的问题是,当我从Spring控制器端注销时(比如应用程序重新启动或超时等),当用户得到这个调用时,它返回给我整个登录页面UI。我希望Spring返回一些状态码和一些消息,说明会话超时或我可以让用户调用注销的东西。因此我能够以传统方式对这些东西进行排序,因为Spring没有给我任何特定的状态码,但在本例中为200 我像这样签入AngularJS控制器代码的实例-
if(response.data instanceof Object){
self.list = response.data;
}
else{
logout();
}
这解决了我的问题。如果有更好的方法,请发表评论。当您尝试在没有活动会话的情况下访问某个内容时,您会从spring security获得未经授权的401,当您的前端获得401时,它的功能由您自行编码。感谢您的回复,但问题是我的登录页面仍有200个响应代码。这就是后端发生的情况,我调用了未经授权的UI,由于上面的安全配置,我可以看到这里有两个调用,第一个是status-302重定向到login,另一个是status-200,其中有登录页面数据作为响应。因此,一旦响应返回到我的AngularJS函数,它将作为200个状态和整个登录页面代码作为响应。这是因为您有
.formLogin()
这告诉spring为您提供其内置的loginformYes,这就是我需要建议的问题。因此,当用户第一次登录时,上面的spring配置可以根据需要正常工作,但是当我已经登录并尝试按下我有权访问但在后端会话中消失的按钮时,如何处理此场景。所以我想告诉用户一些通知,您已经注销,并希望他正确注销。我的问题是,我无法确定这一点,因为spring正在重新提交200状态和完整的登录表单。我如何确定spring在这里抱怨并要求用户登录。如果您使用spring提供的表单登录,为什么不直接获取html并将其呈现给客户端?然后让他们可以登录?您不能相信客户端每次都单击“注销”