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

如何在Spring Security的AccessDeniedHandler中重定向到当前页面

如何让CustomAccessDeniedHandler重定向到用户访问的当前页面?

要实现重定向到用户原本访问的页面,核心思路是获取用户被拒绝访问时的请求地址,然后把重定向目标换成这个地址就行。你当前的代码是固定跳转到/accessDenied,只需要修改handle方法里的逻辑,先提取原请求的完整路径(包括查询参数),再执行重定向。

修改后的完整代码

public class CustomAccessDeniedHandler implements AccessDeniedHandler {
    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException exc) throws IOException, ServletException {
        // 1. 获取原请求的路径部分(比如 /admin/dashboard)
        String originalPath = request.getRequestURI();
        // 2. 获取查询参数(比如 id=100&type=view),没有参数时返回null
        String queryParams = request.getQueryString();
        
        // 3. 拼接完整的原地址(如果有参数的话)
        if (queryParams != null) {
            originalPath += "?" + queryParams;
        }
        
        // 4. 重定向到用户原本访问的页面
        response.sendRedirect(request.getContextPath() + originalPath);
    }
}

关键细节说明

  • request.getRequestURI():拿到的是域名之后的路径部分,不含查询参数,适合作为基础路径
  • request.getQueryString():获取URL中的查询参数串,需要做非空判断,避免拼接出/?null这种无效地址
  • 如果需要给用户提示权限不足的信息,可以在重定向前把错误信息存入Session,比如:
    request.getSession().setAttribute("authError", "抱歉,您没有访问该页面的权限");
    
    之后在原页面就可以取出这个Session属性,展示给用户友好的提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:47:39