spring security session ajax,Spring security + Ajax session timeout issue

I realise this is from quite some time ago, but I want to put this here to see if it helps someone else.

I followed the same idea in http://distigme.wordpress.com/2012/11/01/ajax-and-spring-security-form-based-login/ and had the same issue in that the first returned content was the login page, and the next was a HTTP 403.

I think this is the part of Spring where we hit the split between Spring XML config doing everything, or we write a bunch of code to overload what it can do for us. I prefer to do as much as I can in the XML config.

My solution was to have the XML configuration throwing a 403 error as what the blog has. I didn't write a Matching class because my workflow required going back to the first page, so I don't use the org.springframework.security.web.savedrequest.HttpSessionRequestCache.

I'm a big fan of nesting beans if I don't need them elsewhere. In my $.ajax call I put

dataType: 'json'

to make sure that if the returned content is not JSON (e.g. the login page) then the error function is called. This will also catch a 403 error as well.

error: function (xhr, textStatus, errorThrown) {

if (xhr.status == 403 || textStatus == 'parsererror' && xhr.responseText.match('rememberMe').length > 0) {

alert('Your session has timed out.');

window.location = '';

} else

alert('Something went wrong. ' + xhr.status + ': ' + errorThrown);

}

I'm searching for the rememberMe text to make sure it's the login page. I don't expect that on any other page.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Session timeout in Spring Security refers to the amount of time a user's session can remain active without any activity. When a user logs in to a web application, a session is created for that user. The session remains active until the user logs out, or until the session timeout period expires. By default, Spring Security sets the session timeout to 30 minutes. However, this can be configured in the application's configuration file. To change the session timeout value, you need to set the `server.servlet.session.timeout` property in your `application.properties` file. For example, to set the session timeout to 60 minutes, you can add the following line to your `application.properties` file: ``` server.servlet.session.timeout=60m ``` In addition to setting the session timeout, you can also configure Spring Security to handle session expiration. For example, you can redirect the user to a login page or display a custom message when the session expires. To do this, you need to configure the `session-management` element in your Spring Security configuration file. ``` <http> ... <session-management> <concurrency-control max-sessions="1" expired-url="/login?expired=true" /> </session-management> </http> ``` In the above example, the `max-sessions` attribute limits the user to only one session at a time. If the user tries to open a new session, the previous session will be invalidated. The `expired-url` attribute specifies the URL to redirect the user to when the session expires. In this case, the user will be redirected to the login page with a query parameter indicating that the session has expired.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值