能做到的话,又该如何做呢?
目前用的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();
}
}
继承,重写方法我感觉可行
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。