【问题标题】:Webjars not load correctlyWebjar 无法正确加载
【发布时间】:2018-12-15 02:51:38
【问题描述】:

我正在使用 SpringMVC 4.3.13 和 Spring Security 4.2.4。
在最后几天,我将 webjars 依赖项添加到我的 web 应用程序中,如果我已经登录到应用程序,一切正常。
我唯一的问题是在我无法使用 webjars 的登录页面中,因为 Spring Security 不允许我下载资源。
这里我如何在登录页面中加载资源

<script src="/webjars/jquery/jquery.min.js"></script>

这里是MVCConfiguration中的资源配置

 @Override
 public void addResourceHandlers(final ResourceHandlerRegistry registry) {
     registry.addResourceHandler("/webjars/**").addResourceLocations(/webjars/")
        .resourceChain(false)
        .addResolver(new WebJarsResourceResolver())
        .addResolver(new PathResourceResolver());
     registry.addResourceHandler("/css/**").addResourceLocations("/css/");
     registry.addResourceHandler("/js/**").addResourceLocations("/js/");
     registry.addResourceHandler("/plugins/**").addResourceLocations(/plugins/");
     registry.addResourceHandler("/img/**").addResourceLocations("/img/");
     registry.addResourceHandler("/images/**").addResourceLocations(/images/");
     registry.addResourceHandler("/font/**").addResourceLocations("/font/");
     registry.addResourceHandler("/fonts/**").addResourceLocations("/fonts/");
     registry.addResourceHandler("/servlet/**").addResourceLocations("/servlet/");
     registry.addResourceHandler("/user/**").addResourceLocations("/user/");
     registry.addResourceHandler("/asset/**").addResourceLocations("/asset/");
     registry.addResourceHandler("/xslt/**").addResourceLocations("/xslt/");
     registry.addResourceHandler("/jsp/**").addResourceLocations("/jsp/");
     registry.addResourceHandler("/applets/**").addResourceLocations("/applets/");
     registry.addResourceHandler("/manager/**").addResourceLocations("/manager/");
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
 }

最后是我的 WebSecurityConfig

 @Override
 public void configure(WebSecurity web) throws Exception {
     web
        .ignoring()
        .antMatchers("/webjars/**");
 }

 @Override protected void configure(final HttpSecurity http) throws Exception {
      LOGGER.info("Initialization HTTP configuration");
      http
          .csrf().disable()
          .addFilterBefore(authenticationFilter(), UsernamePasswordAuthenticationFilter.class)
          .authorizeRequests().antMatchers("/login", "/asset/**","/privileged/**").permitAll()
          .anyRequest().authenticated()
          .and().formLogin().loginPage("/login")
          .defaultSuccessUrl("/home")
          .successHandler(customAuthenticationSuccessHandler)
          .permitAll();
 }

如您所见,我已经在安全配置中添加了异常。 我也试试这个配置

.antMatchers("/login", "/asset/**","/privileged/**","/webjars/**").permitAll()

但没有成功,有人有任何想法。

更新 resourceHandler 和 ResourceLocations 的配置是正确的。 事实上,登录后 webjars 工作正常

【问题讨论】:

    标签: javascript java spring-mvc spring-security webjars


    【解决方案1】:

    在您的 xml 配置文件中添加以下代码。

    <mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/>
    

    或使用 JavaConfig

    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
      }
    
    }
    

    【讨论】:

    • 已经尝试但不起作用,如果我删除对 .resourceChain(false) 的显式调用,webjar 也不起作用
    【解决方案2】:

    该问题与 Spring Security 无关。
    罪魁祸首是一个旧的自定义安全层,将来会被 Spring 安全性完全取代。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多