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

如何配置Filter过滤器实现登录页面无需认证即可访问

登录页免Filter认证拦截配置方案

你贴出的AppFilter当前仅实现了基础上下文(BaseURL、区域语言)的设置逻辑,未包含身份认证代码,认证拦截逻辑要么在该类的未贴出部分,要么在其他关联Filter中,可通过以下两种方式实现登录路径免认证:

方案1:Filter注册层直接配置排除路径

该方式不需要修改Filter业务代码,在Filter注册规则层面直接跳过不需要拦截的路径,配置方式根据你用的注册方式选择:

  • 若为Spring Boot环境,通过FilterRegistrationBean配置排除规则:
@Bean
public FilterRegistrationBean<AppFilter> appFilterRegistration() {
    FilterRegistrationBean<AppFilter> registration = new FilterRegistrationBean<>();
    registration.setFilter(new AppFilter());
    registration.addUrlPatterns("/*");
    // 配置免拦截路径,多个路径用逗号分隔
    registration.addInitParameter("excludedUrls", "/login,/api/auth/login,/static/**,/captcha,/error");
    registration.setOrder(1);
    return registration;
}
  • 若为传统web.xml配置,可在Filter映射规则中单独指定拦截范围,避免用/*通配所有路径,或通过init-param传入白名单配置供Filter读取。

方案2:Filter内部增加白名单放行逻辑

该方式兼容性最强,不受注册方式限制,直接在doFilter方法最开头增加路径判断,白名单路径直接跳过认证逻辑即可。
注意不要直接跳过整个Filter的执行,否则你当前写的BaseURL、语言上下文设置逻辑会在登录页失效,参考修改代码:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException {
    HttpServletRequest httpReq = (HttpServletRequest) request;
    HttpServletResponse httpResp = (HttpServletResponse) response;
    // 免认证白名单,根据实际业务路径调整
    List<String> authWhiteList = Arrays.asList("/login", "/api/auth/login", "/static/", "/captcha", "/error");
    String requestUri = httpReq.getRequestURI();
    boolean inWhiteList = authWhiteList.stream().anyMatch(requestUri::startsWith);

    // 非白名单路径才执行身份校验
    if (!inWhiteList) {
        // 这里替换成你实际的认证判断逻辑,比如校验session/token
        Object currentUser = httpReq.getSession().getAttribute("currentUser");
        if (currentUser == null) {
            httpResp.sendRedirect(httpReq.getContextPath() + "/login");
            return;
        }
    }

    // 原有逻辑保持不变,所有路径包括白名单都要执行上下文设置
    BASE_URL.set(computeBaseUrl(request));
    LANGUAGE.set(request.getLocale());
    try {
        chain.doFilter(request, response);
    } finally {
        LANGUAGE.remove();
        BASE_URL.remove();
    }
}

配置注意事项

  • 白名单需要同时覆盖登录页展示路径、登录表单提交接口路径、验证码接口、登录页依赖的静态资源路径,否则会出现登录页样式丢失、登录请求被拦截死循环的问题
  • 如果身份认证逻辑是在独立的认证Filter中实现,直接把白名单判断逻辑加到对应认证Filter中即可,不需要修改当前AppFilter
  • 多Filter场景下注意执行顺序,编码、上下文设置类Filter优先级要高于认证Filter,避免出现乱码、上下文参数丢失问题

内容的提问来源于stack exchange,提问作者Maher Ben Taleb Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:48:44