gpt4 book ai didi

java - 如何在 Spring 的过滤器中排除特定 URL?

转载 作者:行者123 更新时间:2023-12-04 08:54:45 40 4
gpt4 key购买 nike

我有一个基本的应用程序过滤器配置,如下所示:

@Configuration
public class ApplicationFilterConfig {

/**
* Check if user is logged in
*/
@Bean
public FilterRegistrationBean applicationFilterRegistration() {

// created a collections that need logins to be validated.
ArrayList<String> urlPatterns = new ArrayList<String>();
urlPatterns.add("/home");
urlPatterns.add("/about");
urlPatterns.add("/contact");
// ...

LoginFilter loginFilter = new LoginFilter();
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(loginFilter);
registration.setUrlPatterns(urlPatterns);
registration.setOrder(1);
return registration;

}


}

但是,列表 urlPatterns即使使用星形注释(例如 /employees/* ),它也会变得很长。我不只是使用 /* 的主要原因是因为我不想为我的登录页面要求登录验证。如果我这样做了,它会创建一个无限循环的重定向。

是否 FilterRegistrationBean类允许您将过滤器应用于除某些模式之外的所有 URL 模式?

我可以将除登录页面之外的所有内容都放在一个目录中,并将我的 URL 模式设置为 /subdirectory/*但这为我的 web 应用程序中的每个文件增加了不必要的深度。

最佳答案

FilterRegistrationBean不提供(至少到现在为止)任何排除方法 URL 模式 .但它可以从Filter 得到照顾。实现(在本例中为 LoginFilter )。实现 LoginFilter通过扩展 OncePerRequestFilter它有一个名为 shouldNotFilter 的方法() 可以覆盖以满足您的需要。

    public class LoginFilter extends OncePerRequestFilter {

private List<String> excludeUrlPatterns = new ArrayList<String();

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException
{
// Implementation....
}

@Override
protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException
{
// Populate excludeUrlPatterns on which one to exclude here
}

}

更多详情可以关注此 link

关于java - 如何在 Spring 的过滤器中排除特定 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39212551/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com