WebMvcConfigurer 放行接口
时间: 2023-11-04 20:54:29 浏览: 93
WebMvcConfigurer是一个接口,它定义了一些方法,用于自定义Spring MVC的配置。通过实现WebMvcConfigurer接口,我们可以自定义一些配置,例如添加拦截器、添加格式化器、添加消息转换器等。在Java 8之前,我们可以继承WebMvcConfigurerAdapter类来实现WebMvcConfigurer接口的方法,但在Java 8之后,接口可以包含默认方法,所以WebMvcConfigurerAdapter类已经被废弃了。
相关问题
WebMvcConfigurer 放行某个接口
要放行某个接口,可以在实现`WebMvcConfigurer`接口的配置类中,重写`addInterceptors`方法,并在该方法中使用`InterceptorRegistry`对象的`excludePathPatterns`方法来添加需要放行的接口路径。
示例代码如下:
```java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new WebInterceptor())
.excludePathPatterns("/api/xxx") // 需要放行的接口路径
.addPathPatterns("/**"); // 所有请求都需要拦截
}
}
```
Springboot怎么实现接口登录放行,实现免登录访问接口
Spring Boot可以通过拦截器(Interceptor)或者过滤器(Filter)来实现接口登录放行,实现免登录访问接口。
下面分别介绍两种实现方式:
1. 拦截器方式
首先创建一个拦截器类,用于拦截请求并判断用户是否已登录:
```java
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 判断用户是否已登录,如果已登录则放行
HttpSession session = request.getSession();
if (session.getAttribute("user") != null) {
return true;
}
// 用户未登录,拦截请求
response.sendRedirect("/login");
return false;
}
}
```
然后在Spring Boot配置文件中添加拦截器配置:
```java
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 添加拦截器,拦截所有请求,除了登录接口和静态资源
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/login", "/static/**");
}
}
```
上述配置中,`addPathPatterns("/**")`表示所有请求都被拦截,`.excludePathPatterns("/login", "/static/**")`表示排除了登录接口和静态资源不被拦截。
2. 过滤器方式
创建一个过滤器类,用于拦截请求并判断用户是否已登录:
```java
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
// 判断用户是否已登录,如果已登录则放行
HttpSession session = req.getSession();
if (session.getAttribute("user") != null) {
chain.doFilter(request, response);
return;
}
// 用户未登录,重定向到登录页面
resp.sendRedirect("/login");
}
@Override
public void destroy() {
}
}
```
然后在Spring Boot配置文件中添加过滤器配置:
```java
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean<LoginFilter> loginFilterRegistration() {
FilterRegistrationBean<LoginFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new LoginFilter());
registration.addUrlPatterns("/*");
registration.setName("loginFilter");
registration.setOrder(1);
return registration;
}
}
```
上述配置中,`registration.setFilter(new LoginFilter())`表示使用`LoginFilter`过滤器,`registration.addUrlPatterns("/*")`表示拦截所有请求,`registration.setOrder(1)`表示该过滤器的执行顺序为第一位。
阅读全文