1、权限过滤器 项目中创建PermissionFilter类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 package com.example.demo.config; import jakarta.servlet.*; import jakarta.servlet.annotation.WebFilter; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; // 权限过滤器 @WebFilter(urlPatterns = "/*") public class PermissionFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 将 ServletRequest 和 ServletResponse 转换为 HttpServletRequest 和 HttpServletResponse // 这样可以使用 HTTP 协议特有的方法 HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; // 模拟从请求中获取用户角色 // 这里假设用户角色已经在会话中,并用于后续的权限检查 String userRole = (String) httpRequest.getSession().getAttribute("userRole"); // 模拟需要 ADMIN 角色才能访问的路径 // 如果请求的路径以 "/admin/" 开头,检查用户角色是否为 ADMIN // 如果不是 ADMIN 角色,返回 403 错误,表示用户没有访问权限 if (httpRequest.getRequestURI().startsWith("/admin/")) { if (!"ADMIN".equals(userRole)) { httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "You don't have permission to access this resource."); return; } } // 如果用户有权限或者请求的资源不需要权限,继续执行链中的下一个过滤器或目标资源 chain.doFilter(request, response); } }