You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grails4.0.12+SpringSecurity4.0.3:DataTables服务端请求中springSecurityService.principal为空

解决Spring Security在DataTables Ajax请求中无法获取当前用户的问题
  • 检查Ajax请求的认证凭证携带配置
    DataTables默认发起的Ajax请求可能不会自动携带认证Cookie(如JSESSIONID),导致Spring Security无法识别已登录用户。需要在DataTables初始化时开启凭证携带:

    $('#targetTable').DataTable({
        ajax: {
            url: '/your-api-path',
            type: 'POST',
            xhrFields: {
                withCredentials: true
            }
        },
        // 其他表格配置项
    });
    
  • 处理CSRF令牌验证
    若Spring Security启用了CSRF保护(默认开启),Ajax请求必须携带CSRF令牌。先在页面中注入令牌信息:

    <meta name="_csrf" content="${_csrf.token}"/>
    <meta name="_csrf_header" content="${_csrf.headerName}"/>
    

    再在DataTables的Ajax请求中添加请求头:

    var csrfToken = $('meta[name="_csrf"]').attr('content');
    var csrfHeader = $('meta[name="_csrf_header"]').attr('content');
    
    $('#targetTable').DataTable({
        ajax: {
            url: '/your-api-path',
            type: 'POST',
            beforeSend: function(xhr) {
                xhr.setRequestHeader(csrfHeader, csrfToken);
            },
            xhrFields: {
                withCredentials: true
            }
        },
        // 其他表格配置项
    });
    
  • 验证控制器的权限配置
    确保目标控制器方法没有被设置为匿名访问,添加权限注解强制认证校验:

    @Controller
    public class DataController {
        @Autowired
        private SpringSecurityService springSecurityService;
    
        @PostMapping("/your-api-path")
        @PreAuthorize("isAuthenticated()")
        @ResponseBody
        public Object handleDataRequest() {
            User currentUser = springSecurityService.getCurrentUser();
            // 业务逻辑处理
            return resultData;
        }
    }
    
  • 检查会话管理策略
    若使用Session认证,确认Spring Security未配置sessionCreationPolicy: STATELESS,否则不会创建会话,导致无法获取用户信息。如果是JWT等Token认证,需确保Ajax请求在请求头中携带Token,并配置对应的Spring Security过滤器解析令牌。

内容的提问来源于stack exchange,提问作者Jim Gough

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:50:24