springboot 使用拦截器 访问后台前端显示重定向次数过多
时间: 2023-10-31 12:10:09 浏览: 38
出现这种情况一般是因为你在拦截器中进行了重定向,但是没有对重定向进行限制,导致出现了重定向次数过多的情况。
可以尝试在拦截器中添加一个判断,判断当前请求是否为重定向请求,如果是,则不再进行重定向。示例代码如下:
```java
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 判断当前请求是否为重定向请求
if (response.isCommitted() || response.getStatus() == HttpServletResponse.SC_FOUND) {
return false;
}
// 拦截逻辑
// ...
return true;
}
}
```
另外,如果你使用的是 Spring Security,也有可能是因为拦截器和 Spring Security 中的拦截器发生了冲突,可以尝试将拦截器的顺序调整为在 Spring Security 拦截器之前。
相关问题
springboot设置拦截器 访问静态资源图片不显示
在Spring Boot中设置拦截器时,需要注意一些细节。
首先,如果你的静态资源图片不显示,可能是因为拦截器配置不当导致的。在配置拦截器时,可以使用`addPathPatterns()`方法设置需要拦截的路径,同时也需要使用`excludePathPatterns()`方法排除不需要拦截的路径。如果没有正确地配置排除路径,就可能会导致静态资源无法访问。
另外,还需要在配置文件中设置静态资源路径。在Spring Boot中,默认情况下静态资源路径为`/static`、`/public`、`/resources`和`/META-INF/resources`。如果你的静态资源存储在其他路径下,需要在配置文件中进行设置。
以下是一个示例拦截器配置,可以参考一下:
```java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new UserInterceptor())
.addPathPatterns("/user/**")
.excludePathPatterns("/user/login", "/user/register");
registry.addInterceptor(new AdminInterceptor())
.addPathPatterns("/admin/**")
.excludePathPatterns("/admin/login");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
}
```
在上面的示例中,`UserInterceptor`和`AdminInterceptor`分别是自定义的拦截器类。`addPathPatterns()`方法设置需要拦截的路径,`excludePathPatterns()`方法排除不需要拦截的路径。`addResourceHandlers()`方法设置静态资源路径为`/static/**`,存储在`classpath:/static/`下。
springboot使用拦截器
在Spring Boot中使用拦截器非常简单。首先,你需要创建一个实现了`HandlerInterceptor`接口的拦截器类。这个接口包含了三个方法:`preHandle`,`postHandle`和`afterCompletion`。
1. `preHandle`方法会在请求处理之前被调用。你可以在这个方法中进行一些前置处理,比如身份验证、日志记录等。如果你希望请求继续被处理,则返回`true`;如果你希望请求终止,则返回`false`。
2. `postHandle`方法会在请求处理之后、视图渲染之前被调用。你可以在这个方法中进行一些后置处理,比如修改模型数据、添加视图对象等。
3. `afterCompletion`方法会在整个请求完成之后、视图渲染完毕之后被调用。你可以在这个方法中进行一些资源清理的工作。
接下来,你需要创建一个配置类,用于注册拦截器。在这个配置类中,你需要继承`WebMvcConfigurerAdapter`类,并覆盖其中的`addInterceptors`方法。在这个方法中,你可以添加你的拦截器实例,并指定拦截的路径。
下面是一个示例:
```java
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new YourInterceptor())
.addPathPatterns("/**") // 拦截所有路径
.excludePathPatterns("/login"); // 不拦截登录路径
}
}
```
其中,`YourInterceptor`是你自己定义的拦截器类。在上面的示例中,我们将拦截器应用于所有路径,并排除了`/login`路径。
这样配置完成后,你的拦截器将会生效。当请求匹配到拦截路径时,拦截器的相应方法将会被调用。