我在我的应用程序中使用spring security,我的会话超时是30分钟。我也在前端使用了一些ajax调用。
我的问题是: -
问题-1 我正在通过ajax调用上传.xml文件,它需要花费超过30分钟,可能需要1小时(这取决于文件大小)。如何在spring security或其他任何方式处理ajax调用的会话超时? 因为文件上传成功后它将我重定向到登录页面实际上我不需要这个。我希望在我的应用程序中发生任何ajax调用时更新服务器端的会话。
请帮我解决这个问题。
Ajax代码
function uploadForm(){
if ($('div.bootstrap-filestyle').find('input[type="text"]')
.val() == "") {
alert("No file selected");
} else {
var selectedActionUrl = $("#drpLink").val();
console.log(selectedActionUrl);
var Url = "";
if (selectedActionUrl == 1) {
Url = "${pageContext.request.contextPath}/excellUpload";
}
console.log('file uploading..');
var $statusMsgDiv = $('div#status-msg');
$('#result').html('');
var $uploadFrm = $("#uploadForm");
$uploadFrm.attr('action', fUrl);
$uploadFrm.ajaxForm(
{
beforeSend : function() {
//some logic
},
success : function(jsonRes) {
//some logic
},
error : function(xhr, textStatus,errorThrown) {
//some logic
}).submit();
}
return false;
}
服务器端代码
web.xml文件
// .....一些代码
的Login.jsp
<error-page>
<error-code>404</error-code>
<location>/404</location>
</error-page>
<session-config>
<session-timeout>30</session-timeout>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
问题2
我是否需要每次在fileUpload控制器中更新会话超时值或需要编写任何其他可以提供所有ajax请求或响应的控制器?请帮我解决这个问题。 在此先感谢.....
答案 0 :(得分:1)
对于某些文件上传,它还需要5到8小时,所以我想要它 当ajax请求进入我不想要的服务器时动态动态 任何会话超时。用户在没有db的情况下闲置30分钟后 点击/ ajax调用该时间只需要会话超时。
<session-config>
<session-timeout>30</session-timeout>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
当您在web.xml中配置会话超时时,在此方案中,如果客户端与客户端之间不活动的时间段,会话将仅会超时。浏览器超过30分钟。如果在这30分钟内有客户要求。会话将再次将其超时计数器重置为30分钟。即使您没有配置会话超时,也会有默认的服务器会话超时时间间隔。对于tomcat,它是30分钟,服务器将在30分钟不活动后自动使会话无效。
现在关于你的ajax文件上传过程,如果客户端和客户端之间存在持续的交互。服务器。会议不会超时。 Web应用程序中的会话仅超时主要是由于两个原因1.安全性2.不活动,如果客户端不再需要,则可以回收分配给会话的资源。
以编程方式使用ajax请求可以设置会话超时
HttpSession session = request.getSession();
session.setMaxInactiveInterval(20*60);
优先于web.xml配置。
您还可以实施JSFIDDLE
是的,我立即尝试多次重定向到登录 文件上传成功/失败后的页面。(文件上传时需要更多 超过30分钟。
您需要在客户端和客户端之间创建心跳拦截器。服务器。在上传文件的同一个ajax调用中。您必须在每n秒/分钟后定期向服务器发送请求,这将使您的会话保持活动状态。在ajax中创建一个回调函数,在文件上传到服务器后停止发送请求。检查cookie based session persistence&amp; this
答案 1 :(得分:0)
不要通过web.xml设置会话超时,而是尝试动态地在控制器中设置它。您可以这样设置,
HttpSession session = request.getSession();
session.setMaxInactiveInterval(dynamicMinutesValue*60);
答案 2 :(得分:-1)
你可以这样做:
创建一个不需要任何会话变量的URL。话虽这么说,我在想你是在登录功能的某个地方设置你的会话。确保无法登录即可访问上传URL。
要做到这一点,你应该有一个监听器/拦截器,以确保客户端访问的所有URL都在会话中。这样,您不仅可以控制上传,还可以控制您希望绕过会话超时的任何其他URL。 :)
有很多方法可以给这只猫上皮。
如果这是有道理的,请告诉我。
感谢。