【问题标题】:Spring security Session Timeout handling for Ajax callsAjax 调用的 Spring 安全会话超时处理
【发布时间】:2014-09-04 00:54:45
【问题描述】:

我在使用 Spring Security 的地方创建了 webapp,并在 spring-security.xml 文件中添加了 2 个自定义过滤器,如下所示。

    <security:custom-filter ref="authenticationFilter" position="FORM_LOGIN_FILTER"/>
    <security:custom-filter ref="concurrencyFilter" position="CONCURRENT_SESSION_FILTER"/>

它适用于非 ajax 请求。当我尝试在会话已过期时发送 AJAX 请求时,操作将我的登录页面作为 html 返回,作为响应加载到 div 元素中。 我已经搜索了解决方案并找到了此链接Session Timeout handling for Ajax calls,其中定义的功能返回状态代码,此代码用于 javascript 端,以便将用户导航到登录页面。

我的问题是:

spring-security.xml文件中authenticationFilterconcurrencyFilterajaxTimeoutRedirectFilter的定义顺序使请求管道正确处理?

【问题讨论】:

    标签: java ajax spring spring-security


    【解决方案1】:

    3)过滤器配置

    想法是在Spring Security过滤器链中添加上述自定义过滤器。过滤器链中的顺序至关重要。我们的过滤器应该在普通 ExceptionTranslationFilter 之前拦截 Ajax 调用的会话超时,以便发送自定义 HTTP 错误代码。

    在 xml 配置中添加:

    <custom-filter ref="ajaxTimeoutRedirectFilter" after="EXCEPTION_TRANSLATION_FILTER"/>
    

    在java配置中添加:

    @Bean
    public Filter ajaxTimeOutRedirectFilter() {
        AjaxTimeOutRedirectFilter f = new AjaxTimeOutRedirectFilter();
        //f.setCustomSessionExpiredErrorCode(901);
        return f;
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .addFilterAfter(ajaxTimeOutRedirectFilter(), ExceptionTranslationFilter.class)
            ...
            ...
    }
    

    感谢DuyHai's Java BlogDemo application for the article,它对我有用

    【讨论】:

    • 好极了,非常好的解决方案
    • @mtbadi39 我遵循了与 DuyHai 博客相同的程序,但重定向不起作用。
    猜你喜欢
    • 2014-07-17
    • 2011-07-11
    • 2020-02-09
    • 2015-08-05
    • 1970-01-01
    • 2017-12-30
    • 2013-01-20
    • 2014-03-22
    相关资源
    最近更新 更多