Sha*_*ick 62 apache spring-mvc dropbox static-content spring-boot
我有一个Spring Boot Web应用程序,我想在我的Linode VPS(〜/ Dropbox/images)上的共享Dropbox目录中提供静态内容.我已经读过Spring Boot会自动提供静态内容
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/",
Run Code Online (Sandbox Code Playgroud)
但当然我的Dropbox目录不在类路径上.
虽然我可以配置Apache来提供Dropbox文件夹中的图像,但我希望利用Spring Security来限制静态内容对经过身份验证的用户的访问.
Dav*_*yer 67
您可以添加自己的静态资源处理程序(它会覆盖默认值),例如
@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("file:/path/to/my/dropbox/");
}
}
Run Code Online (Sandbox Code Playgroud)
在Spring Boot中有一些关于这个的文档,但它实际上只是一个普通的Spring MVC功能.
此外,自春季启动1.2(我认为)你可以简单地设置spring.resources.staticLocations.
kal*_*ech 32
Springboot(通过Spring)现在可以轻松地添加到现有资源处理程序.见Dave Syers的回答.要添加到现有的静态资源处理程序,只需确保使用不覆盖现有路径的资源处理程序路径.
以下两个"也"注释仍然有效.
...
[编辑:以下方法不再有效]
如果你想扩展默认的静态资源处理程序,那么这样的东西似乎工作:
@Configuration
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class CustomWebMvcAutoConfig extends
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String myExternalFilePath = "file:///C:/Temp/whatever/m/";
registry.addResourceHandler("/m/**").addResourceLocations(myExternalFilePath);
super.addResourceHandlers(registry);
}
}
Run Code Online (Sandbox Code Playgroud)
调用以super.addResourceHandlers设置默认处理程序.
也:
asm*_*ier 19
根据@Dave Syers的回答,我将以下类添加到Spring Boot项目中:
@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
private static final Logger LOG = LoggerFactory.getLogger(StaticResourceConfiguration.class);
@Value("${static.path}")
private String staticPath;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if(staticPath != null) {
LOG.info("Serving static content from " + staticPath);
registry.addResourceHandler("/**").addResourceLocations("file:" + staticPath);
}
}
// see https://stackoverflow.com/questions/27381781/java-spring-boot-how-to-map-my-my-app-root-to-index-html
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("redirect:/index.html");
}
}
Run Code Online (Sandbox Code Playgroud)
这允许我用参数--static.path这样启动我的春季启动应用程序
java -jar spring-app-1.0-SNAPSHOT.jar --static.path=/path/to/my/static-files/
Run Code Online (Sandbox Code Playgroud)
这对于开发和测试非常方便.
我想从 c:/images 提供静态内容
添加此属性对我有用:
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:///C:/images/
Run Code Online (Sandbox Code Playgroud)
我在 Spring Boot Doc附录 A 中找到了该属性的原始值
这将使 c:/images/image.jpg 可以作为http://localhost:8080/image.jpg 访问
有一个属性spring.resources.staticLocations可以设置在application.properties.请注意,这将覆盖默认位置.见org.springframework.boot.autoconfigure.web.ResourceProperties.
基于@Dave Syer、@kaliatech 和@asmaier,springboot v2+ 的回答是:
@Configuration
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class StaticResourceConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String myExternalFilePath = "file:///C:/temp/whatever/m/";
registry.addResourceHandler("/m/**").addResourceLocations(myExternalFilePath);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
@马克·谢弗
永远不会太晚,但是/在静态之后添加一个斜杠():
spring.resources.static-locations=file:/opt/x/y/z/static/
Run Code Online (Sandbox Code Playgroud)
所以http://<host>/index.html现在可以到达。
| 归档时间: |
|
| 查看次数: |
88284 次 |
| 最近记录: |