首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring boot:为公共和私有(受限)静态内容提供服务

Spring boot:为公共和私有(受限)静态内容提供服务
EN

Stack Overflow用户
提问于 2021-08-30 14:33:44
回答 1查看 46关注 0票数 0

我正在使用spring-boot-starter-webembedded-jettystarter-jersey starter。Jersey servlet上下文路径在application.properties中配置为从/api提供服务。所以所有的/api/.*电话都会转移到新泽西。

因为我使用的是starter-web,所以静态内容是从static/目录提供的,如下所示:

static/public/下列出的所有资源都可以不受任何限制地访问。但static/private下的资源应该受到限制,只有在登录时才会显示。

为了实现这一点,我编写了一个过滤器:

代码语言:javascript
复制
@Component
@Order(1)
public static class PrivateContentFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        if (request.getRequestURI().matches(".*/static/private/.*")) {
            // Check for authentication in the cookie and procceed
            // The cookie is handed to an auth mirco-service, that does the actual validation. 
        }
    }
}

但是,只有当路径为api/.*时才能使用此过滤器,而不是静态内容:/public/.*,也不是/private.*。这里我漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-31 07:42:21

/static下的所有内容都是context /,因此过滤器正则表达式必须如下所示:

代码语言:javascript
复制
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    if (request.getRequestURI().matches("/private/.*")) {
        System.out.println("private");
    } else {
        System.out.println("public");
    }
    filterChain.doFilter(servletRequest, servletResponse);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68985880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档