本文共 3722 字,大约阅读时间需要 12 分钟。
拦截器与过滤器在Spring Boot应用中的实现与配置
在Spring Boot项目中,拦截器和过滤器是非常重要的技术工具,能够帮助我们对应用程序的请求进行统一管理和权限控制。本文将详细介绍如何实现和配置拦截器以及过滤器。
第一部分:拦截器的实现
拦截器在Spring Boot中通过实现HandlerInterceptor接口来实现。我们可以创建一个类,继承HandlerInterceptor,并在preHandle方法中实现自己的逻辑。以下是一个典型的拦截器实现:
import java.io.IOException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import com.example.User;public class AdminInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { User user = (User) request.getSession().getAttribute("USER"); if (user != null) { return true; } response.sendRedirect(request.getContextPath() + "login"); return false; } // 其他方法可以留空或根据需求定制}
第二部分:拦截器的配置
在Spring Boot中配置拦截器,需要创建一个配置类,继承WebMvcConfigurer,并在addInterceptors方法中注册拦截器。以下是一个典型的配置类:
import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class LoginConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration registration = registry.addInterceptor(new AdminInterceptor()); registration.addPathPatterns("/**"); registration.excludePathPatterns("login", "*.html", "*.js", "*.css", "*.woff", "*.ttf"); }}
第三部分:过滤器的实现
过滤器在Spring Boot中通过实现Filter接口来实现。我们可以创建一个类,继承Filter,并在doFilter方法中实现自己的逻辑。以下是一个典型的过滤器实现:
import java.io.IOException;import java.util.Arrays;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import org.springframework.stereotype.Component;@Component@WebFilter(urlPatterns="/**", filterName="loginFilter")public class LoginFilter implements Filter { private static final String[] excludePathPatterns = { "/stuInfo/getAllStuInfoA" }; @Override public void init(FilterConfig filterConfig) throws ServletException { // 初始化逻辑可以在这里添加 } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String url = request.getRequestURI(); if (Arrays.asList(excludePathPatterns).contains(url)) { chain.doFilter(request, response); return; } System.out.println("开始拦截了................"); // 业务逻辑可以在这里添加 chain.doFilter(request, response); } @Override public void destroy() { // 销毁逻辑可以在这里添加 }}
第四部分:过滤器的配置
在Spring Boot中配置过滤器,需要创建一个配置类,注入Filter类到FilterRegistrationBean中,指定URL模式。以下是一个典型的配置类:
import org.springframework.context.annotation.Configuration;import org.springframework.web.filter.FilterRegistrationBean;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration@EnableWebMvcpublic class FilterConfig implements WebMvcConfigurer { @Bean public FilterRegistrationBean registFilter() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new LoginFilter()); registration.addUrlPatterns("/*"); registration.setName("loginFilter"); registration.setOrder(1); return registration; }}
通过以上配置,我们可以在Spring Boot项目中完成拦截器和过滤器的实现和配置。这些技术可以帮助我们对应用程序的请求进行统一管理和权限控制,提升应用的安全性和效率。
转载地址:http://qoih.baihongyu.com/