身份验证过滤器未加载 3 个网页的 css

Posted

技术标签:

【中文标题】身份验证过滤器未加载 3 个网页的 css【英文标题】:Authentication Filter not loading css for 3 web pages 【发布时间】:2016-09-26 02:52:24 【问题描述】:

我的网络应用程序有一个身份验证过滤器,它在登录后成功加载了所有网页的 CSS,除了主页(索引)、关于我们页面(关于)和注册页面(登记)。出于某种原因,我无法弄清楚为什么我的过滤器没有决定为这三个页面加载 css,但对于它工作的其他页面,我已经检查了所有页面的 jsp 文件并且无法发现错误。

有人告诉我,我必须在 doFilter 方法中使用 excludeURLs 修复某些问题,但我仍然感到困惑。

这是我的doFilter:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
        HttpServletRequest httpReq = (HttpServletRequest) request;
        HttpSession session = httpReq.getSession(false); // if the fail login it doesnt create a session

        if (session != null && session.getAttribute("user") == null && !excludeURLs.contains(httpReq.getServletPath()) )
            RequestDispatcher rd = httpReq.getRequestDispatcher("login.jsp");
            rd.forward(request, response);
            return;
        

        chain.doFilter(request, response);
    

这是我排除特定 URL 的 init 方法:

public void init(FilterConfig fConfig) throws ServletException 
        System.out.println("AuthenticationFilter Initiated...");

        //Pages/Servlet
        excludeURLs.add("/login");
        excludeURLs.add("/login.jsp");
        excludeURLs.add("/index");
        excludeURLs.add("/index.jsp");
        excludeURLs.add("/about");
        excludeURLs.add("/about.jsp");
        excludeURLs.add("/register");
        excludeURLs.add("/signup.jsp");

        //Images
        excludeURLs.add("/Images");
        excludeURLs.add("/css");
        excludeURLs.add("/js");
    

【问题讨论】:

【参考方案1】:

假设:

    您的 css 文件的扩展名为“.css”,

    对 css 文件的未经身份验证的访问对您/您的组织来说不是问题,快速解决方法是:

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
        HttpServletRequest httpReq = (HttpServletRequest) request;
        HttpSession session = httpReq.getSession(false); // if the fail login it doesnt create a session
        String path= httpReq.getRequestURI();
        if(path.endsWith(".css"))
          chain.doFilter(request,response);
          return;
        
    
    
        if (session != null && session.getAttribute("user") == null && !excludeURLs.contains(httpReq.getServletPath()) )
            RequestDispatcher rd = httpReq.getRequestDispatcher("login.jsp");
            rd.forward(request, response);
            return;
        
    
        chain.doFilter(request, response);
    
    

【讨论】:

这救了我!非常感谢

以上是关于身份验证过滤器未加载 3 个网页的 css的主要内容,如果未能解决你的问题,请参考以下文章

Spring oauth2令牌请求中未实际使用的基本身份验证过滤器和身份验证入口点

谷歌此网页包含的脚本来自于身份未验证怎么取消

CSS 未应用于未经身份验证的 ASP.NET 页面

在 Spring Boot 中成功身份验证后未生成 JWT 令牌

身份验证过滤器不起作用

如果未通过身份验证,Quarkus 会提供重定向 url