如何在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,比如:
之后在原页面就可以取出这个Session属性,展示给用户友好的提示。request.getSession().setAttribute("authError", "抱歉,您没有访问该页面的权限");
内容的提问来源于stack exchange,提问作者Purushotham
相关产品推荐
相关产品推荐

