【发布时间】:2019-10-02 17:33:54
【问题描述】:
我一直在使用 spring boot,以 spring security 和 Ext Js 作为前端。我添加了这段代码作为弹簧安全的配置。这意味着,当会话到期时,用户将被重定向到引用的 url,对吗?
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and()
.authorizeRequests().antMatchers("/", "/login/**").permitAll().and()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/userAuth")
.permitAll()
.and()
.logout()
.permitAll()
.and()
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/**").permitAll();
http.csrf().disable();
http.headers().frameOptions().disable();
http.sessionManagement().maximumSessions(1).expiredUrl("/login?logout");
}
每次我的前端向 spring 发送一个 ajax 请求,并且用户丢失了会话,spring 将请求转换为 /login?logout 的 get 请求,正如预期的那样,但页面没有被重定向。我只能看到请求响应内容上的登录页面,对用户看到的页面没有任何影响。
为什么会这样?我在这里缺少任何配置或实现吗?
编辑:这是我的 AJAX 请求的 Ext Js 的样子:
onAuthCheck: function (users) {
var result = Ext.Ajax.request({
url: '/Queue/requests/loginCheck',
method: 'POST',
async: false,
params: {
usersInfo: Ext.encode(users)
},
success: function (conn, response, options, eOpts) {
console.log(response)
console.log(conn.status);
if (conn.status === 401 || conn.status === 302) {
location.href='/login?logout';
}
},
failure: function (conn, response, options, eOpts) {
console.log(response)
console.log(conn.status)
if (conn.status === 401 || conn.status === 302) {
location.href='/login?logout';
}
}
})
return (Ext.JSON.decode(result.responseText, true).success);
},
EDIT2:这是我的请求的样子:它有一个状态为 302 的请求,但我仍然在 JS 代码上的 AJAX 响应中获得 200 状态。
【问题讨论】:
-
这是您使用 AJAX 时的正确行为。我猜你在 Ajax 响应中看到了重定向页面(登录页面)。
-
您可能会得到一个无效的会话而不是过期的。尝试 .invalidSessionUrl() 代替(甚至也可以)
-
@Kieveli 我会试试的,谢谢。但我认为这是 AJAX 请求。
标签: java spring spring-boot extjs spring-security