能做到的话,又该如何做呢?
目前用的springboot,使用
ResourceHandlers
映射的资源,发现根本不会进入
Interceptors
,即使不做资源映射,请求也不会进入拦截器...直接报错了:
No mapping found for HTTP request with URI [/resources/test/public/img/5b3e8ed6679f783e921455497f92a91b9de0df61.JPG] in DispatcherServlet with name 'dispatcherServlet'
难道拦截器只能拦截对控制器的请求?那些无效的请求直接 No mapping found ?
@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new ResouceInteceptor()).addPathPatterns("/resources/**");
    super.addInterceptors(registry);
} 
----------------------------------------------------------------------------
我该如何实现对静态资源的访问控制呢?
最起码能做到访问
/resources/test/public/img/5b3e8ed6679f783e921455497f92a91b9de0df61.JPG
时,我能用代码做相应的处理?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你是想要静态资源的权限控制?
@Anur回复 @Anur:shiro是啊...springboot和spring毕竟不一样,SpringBoot自己配置了很多信息比如:
自动配置的静态资源:在自动配置类的addResourceHandlers方法中定义了一下静态资源的自动配置
①类路径文件:把类路径下的/static、/public、/resources和/META-INF/resources文件夹下的静态文件直接映射为/**,可以通过http://localhost:8080/**来访问。
②webjar:webjar就是将我们常用的脚本框架封装在jar包中的jar包。把webjar的/META-INF/resources/webjars/下的静态资源文件映射为/webjars/**,可以通过http://localhost:8080/webjars/**来访问。
③自动配置的Formatter和Converter。我们可以看一下WebMvcAutoConfiguration类中的定义addFormatters(FormatterRegistry)方法。从代码中可以看出,只要我们定义了Converter、GenericConverter和Formatter接口的实现类的Bean,这些Bean就会自动注册到SpringMVC中。
④自动配置的HttpMessageConverter:在WebMvcAutoConfiguration中,我们注册了messageConverters,在configureMessageConverters方法,在这里直接注入了HttpMessageConverter的Bean,而这个Bean是在HttpMessageConverterAutoConfiguration类中定义的,我们自动注册的HttpMessageConverter除了SpringMVC默认的ByteArrayMessageConverter、StringHttpMessageConverter、SourceHttpMessageConverter、ResourceHttpMessageConverter、
AllEncompassingFormHttpMessageConverter外,在我们的HttpMessageConverterAutoConfiguration的自动配置文件里还引入了JacksonHttpMessageConverter Configuration和GsonHttpMessageConverter Configuration,使得我们获得了额外的HttpMessageConverter。
若jackson的jar包在类路径上,则SpringBoot通过JacksonHttpMessageConverters Configuration增加MappingJackson2HttpMessage Converter和MappingJackson2XmlHttpMessage Converter。
若gason的jar包在类路径上,则SpringBoot通过GsonHttpMessageConverter Configuration增加GsonHttpMessage。
⑤静态首页的支持:把静态index.html文件放置在如下目录:
classpath:META-INF/resources/index.html
classpath:/resources/index.html
classpath:/static/index.html
classpath:/publik/index.html
当我们访问应用根目录http://localhost:8080/时,会直接映射。
自然了如果你想自己增加也是可以的,类似下面的写法就行,自己再改改吧,SpringBoot其实默认有上面的那些了
程序的静态文件(js、css、图片)等需要直接访问,这时我们需要在配置里重写addResourceHandlers方法来实现。
@Configuration
@EnableWebMvc//1会开启一些默认配置,比如ViewResolver或者MessageConverter等,开启SpringMVC支持,没有这个注释,重写WebMvcConfigurerAdapter无效
@EnableScheduling//开始计划任务的支持
@ComponentScan("com.wisely.highlight_springmvc4")
publicclassMyMvcConfigextendsWebMvcConfigurerAdapter{//2重写其方法可以对SpringMVC进行配置
   @Bean
   publicInternalResourceViewResolverviewResolver(){
      InternalResourceViewResolverviewResolver=newInternalResourceViewResolver();
      viewResolver.setPrefix("/WEB-INF/classes/views/");
      viewResolver.setSuffix(".jsp");
      viewResolver.setViewClass(JstlView.class);
      returnviewResolver;
   }
   /**
   *程序的静态文件需要直接访问,重写该方法即可
   */
   @Override
   publicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){
      //addResourceLocations指的是文件放置的目录,addResourceHandler指的是对外暴露的访问路径
      registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/assets/");//3
   }
   @Bean
   //1配置拦截器的Bean
   publicDemoInterceptordemoInterceptor(){
      returnnewDemoInterceptor();
   }
   @Override
   publicvoidaddInterceptors(InterceptorRegistryregistry){//2重写addInterceptors方法,注册拦截器
      registry.addInterceptor(demoInterceptor());
   }
   /**
   *快捷的ViewController,适用于无任何业务处理,只是简单的页面跳转
   */
   @Override
   publicvoidaddViewControllers(ViewControllerRegistryregistry){
      registry.addViewController("/index").setViewName("/index");//快捷的ViewController
      registry.addViewController("/toUpload").setViewName("/upload");
      registry.addViewController("/converter").setViewName("/converter");
      registry.addViewController("/sse").setViewName("/sse");
      registry.addViewController("/async").setViewName("/async");
   }
   /**
   *路径匹配参数设置
   *在SpringMVC中,路径参数如果带"."的话,"."后面的值将会忽略,重写此方法可以不忽略"."后面的参数
   */
   @Override
   publicvoidconfigurePathMatch(PathMatchConfigurerconfigurer){
      configurer.setUseSuffixPatternMatch(false);
   }
   /**
   *文件上传的配置
   */
   @Bean
   publicMultipartResolvermultipartResolver(){
      CommonsMultipartResolvermultipartResolver=newCommonsMultipartResolver();
      multipartResolver.setMaxUploadSize(1000000);
      returnmultipartResolver;
   }
   /**
   *配置自定义的HttpMessageConverter的Bean,在SpringMVC里注册HttpMessageConverter有两个方法
   *①configureMessageConverters:重载会覆盖掉SpringMVC默认注册的多个HttpMessageConverter
   *②extendMessageConverters:仅添加一个自定义的HttpMessageConverter,不覆盖默认注册的HttpMessageConverter
   */
   @Override
   publicvoidextendMessageConverters(List<HttpMessageConverter<?>>converters){
      converters.add(converter());
   }
   @Bean
   publicMyMessageConverterconverter(){
      returnnewMyMessageConverter();
   }
}
继承,重写方法我感觉可行