springboot随笔五:添加Interceptor,Filter,Servlet, Listener
一:添加拦截器:实现HandlerInterceptor接口,并在由配置类(有@Configuration注解)加入该interceptor,并设置拦截路径
package com.wzp.interceptor; import com.wzp.domain.User; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginHandlerInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("intercept url:" + request.getRequestURL()); System.out.println("intercept uri:" + request.getRequestURI()); User user = (User) request.getSession().getAttribute("user"); if (null != user) { return true; } request.setAttribute("flag", "error"); request.getRequestDispatcher("/login").forward(request, response); return false; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
package com.wzp.config; import com.wzp.interceptor.LoginHandlerInterceptor; import com.wzp.resolver.MyLocaleResolver; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration //@EnableWebMvc// 如果配置了这个,springboot的webMvc将不会自动装配,也就是说springboot给我们的默认很多web功能将失效,完全有自己接管 public class MyConfig implements WebMvcConfigurer {// 通过实现WebMvcConfigurer来在原来springboot自动化的基础上进行扩展 // 添加拦截器 @Override public void addInterceptors(InterceptorRegistry registry) { // 除了去登录页面,其他请求全部拦截 registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/", "/index", "/index.html", "/", "/login", "/login.html", "/user/login", "/images/*", "/webjars/**"); } }
二:添加Servlet, Filter, Listener
package com.wzp; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class MyServelt extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("myServlet *********************"); } }
package com.wzp.filter; import javax.servlet.*; import java.io.IOException; public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("myFilter *************"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { } }
package com.wzp.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class MyListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("web 应用启动"); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("web 结束"); } }
package com.wzp.config; import com.wzp.MyServelt; import com.wzp.filter.MyFilter; import com.wzp.listener.MyListener; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.servlet.Filter; import javax.servlet.Servlet; import java.util.Arrays; /** * 与服务器相关的配置 */ @Configuration public class MyServerConfig { @Bean public ServletRegistrationBean myServlet() { ServletRegistrationBean<Servlet> servletServletRegistrationBean = new ServletRegistrationBean<Servlet>(new MyServelt(), "/myServlet"); return servletServletRegistrationBean; } @Bean public FilterRegistrationBean myFilter() { FilterRegistrationBean<Filter> filterFilterRegistrationBean = new FilterRegistrationBean<Filter>(); filterFilterRegistrationBean.setFilter(new MyFilter()); filterFilterRegistrationBean.setUrlPatterns(Arrays.asList("/myServlet")); return filterFilterRegistrationBean; } @Bean public ServletListenerRegistrationBean myListener() { ServletListenerRegistrationBean registrationBean = new ServletListenerRegistrationBean(); registrationBean.setListener(new MyListener()); return registrationBean; } }
浙公网安备 33010602011771号