事先抱歉我的英语。 我目前正在开发一个应用程序,弹簧启动和angularjs作为前端,spring mvc作为后端,所有这些都是弹簧启动,我的问题是,我使用弹簧安全性进行简单的表单登录,如此
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/css/**").permitAll()
.anyRequest().authenticated();
http
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.logoutSuccessUrl("/login?logout")
.invalidateHttpSession(true);
http
.sessionManagement()
.maximumSessions(1)//max session per user
.expiredUrl("/login?expired")
.maxSessionsPreventsLogin(true);
我实现了httpsessionlistener,就像这个
一样简单@Configuration
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("ok");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("not ok");
}
}
和我的Application.java一样简单
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
//Get process id, es para el wrapper de java
}
在我的application.proterties中 server.session-timeout = 5 //短会话,例如
我正面临着两种情况,第一种,当我退出时说不好,好的,这意味着它再次创建会话,当我再次尝试登录时,它说错误的用户名或密码,因为它每个用户只允许1个会话。 我的注销按钮只是来自angularjs的一个简单的请求,比如
this.logout=function($scope){
var LogOut = resource('/sticker/logout');
LogOut.get(function(message){
//window.location.href="login?logout";
console.log(message);
//scope.message = message.message;
});
}
,第二种情况是,当会话到期并且我从angularjs请求它返回登录页面时,我使用以下代码片段捕获此响应,我从interceptors in angularjs
app.factory("httpInterceptor", ["$q", "$window", "$log",
function ($q, $window, $log) {
return {
"response": function (response) {
var responseHeaders;
console.log(response);
responseHeaders = response.headers();
return response;
}
};
}
])
我希望能够返回类似于httpresponse og 440的东西 任何帮助表示感谢。
答案 0 :(得分:0)
fwiw 6个月后......
默认情况下,一旦会话超时,弹出安全性就会响应403。我通过在HttpSecurity配置中添加以下内容来回复401(未授权):
@Configuration
@EnableWebSecurity
public class ServerSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
...
http.exceptionHandling().accessDeniedHandler(accessDeniedHandler());
...
}
private AccessDeniedHandler accessDeniedHandler() {
return (request, response, ex) ->
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, ex.getLocalizedMessage());
}
}