springboot 静态资源映射,configuration,addResourceHandlers 如何添加校验
时间: 2024-12-10 10:33:27 浏览: 24
在Spring Boot中,静态资源映射(Static Resource Handling)是指将Web应用的静态文件(如HTML、CSS、JavaScript等)自动暴露给客户端访问。`addResourceHandlers`方法是在`WebMvcConfigurerAdapter`或者现在更推荐的`WebMvcConfigurer`接口中使用的,用于配置静态资源处理器。
如果你想添加对静态资源访问的验证,比如限制某些资源只能在登录后才能访问,可以在`addResourceHandlers`方法内部设置一个拦截器或者过滤器来实现这个功能。这里有一个基本的例子:
```java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 添加默认的静态资源处理
registry.addResourceHandler("/css/**").addResourceLocations("classpath:/static/css/");
registry.addResourceHandler("/js/**").addResourceLocations("classpath:/static/js/");
// 添加一个拦截器,例如JWT验证
registry.addResourceHandler("/protected/**")
.addResourceLocations("classpath:/static/protected/")
.setCacheControl(CacheControl.maxAge(3600))
.addInterceptor(new AuthenticatedResourceInterceptor(authService)); // authService用于检查用户是否已登录
}
private AuthService authService; // 自定义服务,负责用户认证
// 过滤器或拦截器实现,检查用户权限
private class AuthenticatedResourceInterceptor implements HandlerInterceptor {
// ...
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 检查请求路径是否需要保护,比如使用JWT token
String path = request.getRequestURI();
if (path.startsWith("/protected/")) {
String jwtToken = getJwtFromRequest(request); // 获取token
if (!authService.validateToken(jwtToken)) { // 如果未验证成功,返回401错误
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
return false;
}
}
return true;
}
// ...
}
}
```
在这个例子中,`/protected/**`路径下的静态资源会经过`AuthenticatedResourceInterceptor`的拦截,只有当用户通过`authService.validateToken()`方法验证通过(即有有效的JWT令牌)时,才会允许访问。
阅读全文