Webjars 加载不正确
Webjars not load correctly
我正在使用 SpringMVC 4.3.13 和 Spring 安全 4.2.4。
在过去的几天里,我将 webjars 依赖项添加到我的 webapp 中,如果我已经登录到该应用程序,则一切正常。
我遇到的唯一问题是登录页面无法使用 webjars,因为 Spring 安全不允许我下载资源。
这是我如何在登录页面加载资源
<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 正常工作
在您的 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/");
}
}
问题与 Spring 安全无关。
有罪的是一个旧的自定义安全层,将来会被 Spring 安全性完全取代。
我正在使用 SpringMVC 4.3.13 和 Spring 安全 4.2.4。
在过去的几天里,我将 webjars 依赖项添加到我的 webapp 中,如果我已经登录到该应用程序,则一切正常。
我遇到的唯一问题是登录页面无法使用 webjars,因为 Spring 安全不允许我下载资源。
这是我如何在登录页面加载资源
<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 正常工作
在您的 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/");
}
}
问题与 Spring 安全无关。
有罪的是一个旧的自定义安全层,将来会被 Spring 安全性完全取代。