当前位置: 首页 > 知识库问答 >
问题:

为静态文件、模板文件和RESTendpoint提供服务,无论是否通过一个应用程序的身份验证

袁华清
2023-03-14

我正在尝试创建一个Spring Boot应用程序(最新版本),它可以:

  • 静态HTML、CSS、JavaScript和图像(favicon、jpg、png等)文件
  • 基于Thymeleaf模板文件的HTML内容
  • RESTendpoint

所有这些都应该能够服务于:

  • 没有认证(公共访问)
  • 具有身份验证(限制访问)

这意味着应该应用以下映射:

笔记:

  1. 需要对用户进行身份验证

我列出了许多endpoint,但这仅仅是因为我无法将所有这些和安全公共/非公共结合起来,并且在互联网上找不到任何将所有这些结合起来的示例。

到目前为止我拥有的:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .cors().and()
                .csrf().disable()
                .authorizeRequests()
                
                // Public static files
                .antMatchers(HttpMethod.GET, "/ui/login", "/ui/forgot", "/ui/media/**", "/ui/style/**", "/ui/script/**").permitAll()
                
                // User static files based on Thymeleaf
                .antMatchers(HttpMethod.GET,"/ui/user/**").hasRole("USER")
                
                // Administration static file
                .antMatchers(HttpMethod.GET,"/ui/admin/**").hasRole("ADMIN")
                
                // Authentication REST endpoints
                .antMatchers(HttpMethod.POST, "/api/auth/login").permitAll()
                .antMatchers(HttpMethod.POST, "/api/auth/forgot").permitAll()
                
                // /api/ping, /api/pong endpoints
                .antMatchers("/api/ping").permitAll()
                .antMatchers("/api/pong").hasAnyRole("USER", "ADMIN")
                
                // /api/v1/** endpoint
                .antMatchers("/api/v1/**").permitAll()
                
                .anyRequest().authenticated().and()
                
                // JWT filter
                .addFilterAfter(new JWTAuthorizationFilter(), UsernamePasswordAuthenticationFilter.class)
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }
    
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring()
                .antMatchers("/resources/**");
    }

}

身份验证过程和RESTendpoint可以工作,但Thymeleafendpoint找不到资源文件,静态文件根本不可访问(甚至是公共的或经过身份验证的)。

在过去的三周里,我尝试了很多组合,我真的快要放弃了。

有人能给我指出正确的方向吗?

共有1个答案

刘博雅
2023-03-14

将其添加到WebSecurity配置类中

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring()
                .antMatchers("/resources/**", "/static/**", "/css/**");
    }
 类似资料:
  • 我已经创建了身份提供程序,并且从浏览器中它工作正常。 参考:密钥斗篷身份提供程序后代理登录抛出错误 从浏览器,我可以使用外部IDP登录,如果外部IDP用户不在keycloak中,它会在keyclock中创建,这绝对没问题,并重定向到仪表板。 但我的问题是,我们如何用keycloak rest api实现这个流程? 是否有任何api用于使用外部IDP登录,并将获得外部IDP的令牌以及密钥斗篷的令牌?

  • 问题内容: 我正在为Django使用apache + mod_wsgi。 并且所有css / js / images都通过提供。 出于某种奇怪的原因,当其他人/朋友/同事尝试访问该网站时,jquery / css不会为他们加载,因此页面看上去很混乱。 我的html文件使用这样的代码- 我的nginx配置是这样的 有一个目录,其中有相应的&目录。 奇怪的是,当我访问它们时页面显示正常。 我已经清除了

  • 我有一个Go1.11应用程序,目录如下: 和我的app.yaml: 在本地使用dev_appserver.py时,一切都可以正常工作,但部署到AppEngine后,我的所有静态资产都得到了404S。想法?

  • 我有一个django应用程序,静态文件使用nginx服务。我想在项目中包括应用程序(功能)。 我想创建一个新应用程序,把文件放在静态文件夹下。(但我需要更改nginx conf以提供来自这些dir的文件) > 如果我们想从两个位置提供静态文件,如何更改nginx conf? 我当前的nginx配置如下 如果我们把所有文件都放在主项目中(静态、模板),维护起来会不会变得复杂? 有没有办法像 别名/m

  • 问题内容: 基本上,我为客户制作了一个(相对)简单的应用程序。该应用程序正常工作,但他们一直在要求更改数据。 鉴于该应用程序最初的预期简单性以及它保存静态数据的事实,我没有将其链接到任何后端。该数据将保存在本地静态文件中,而该对象具有保存数据的对象。 问题在于,fle被捆绑到了buld中,因此,如果我只想更改一些静态数据而不必进行rbuild,我不会! 我的数据文件可以在公用文件夹中访问,并且可以

  • 问题内容: 我想在localhost上的gunicorn下运行django项目。我安装并集成了Gunicorn。当我跑步时: 它可以工作,但是没有任何静态文件(css和js) 我在settings.py中禁用了debug和template_debug(将它们设置为false),但是仍然相同。我想念什么吗? 我称静态为: 问题答案: 在开发模式下以及使用其他服务器进行本地开发时,请将其添加到url.