1. 添加自定义servlet
-
代码注册
-
定义一个配置类
@Configuration public class ServletConfig { @Bean public ServletRegistrationBean statViewServlet(){ System.err.println("注册StatViewServlet..."); ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(); // StatViewServlet为自定义的Servlet StatViewServlet statViewServlet = new StatViewServlet(); servletRegistrationBean.setServlet(statViewServlet); Map<String, String> initParams = new HashMap<>(); initParams.put("allow", ""); initParams.put("deny", ""); initParams.put("loginUsername", "root"); initParams.put("loginPassword", "123"); initParams.put("resetEnable", "false"); servletRegistrationBean.setInitParameters(initParams); servletRegistrationBean.addUrlMappings("/druid/*"); return servletRegistrationBean; } }
-
-
注解方式注册
-
在自定义Servlet上添加@WebServlet注解
@WebServlet(urlPatterns="/druid/*", initParams={ @WebInitParam(name="allow",value=""), // IP白名单(没有配置或者为空,则允许所有访问) @WebInitParam(name="deny",value=""), // IP黑名单 (存在共同时,deny优先于allow) @WebInitParam(name="loginUsername",value="root"), // 用户名 @WebInitParam(name="loginPassword",value="123"), // 密码 @WebInitParam(name="resetEnable",value="false") // 禁用HTML页面上的“Reset All”功能 }) public class DruidStatViewServlet extends StatViewServlet { /** * */ private static final long serialVersionUID = 1L; }
-
在spring boot 启动类上添加@ServletComponentScan注解
@SpringBootApplication @ServletComponentScan public class MybatisSpringBootAApplication { public static void main(String[] args) { SpringApplication.run(MybatisSpringBootAApplication.class, args); } }
注: 代码注册的方式更使用于注册第三方Servlet.
-
2. 添加Filter
-
注解方式
-
在自定义的Filter类上添加@WebFilter(urlPatterns = "/*")注解
@WebFilter(filterName="druidWebStatFilter",urlPatterns="/*", initParams={ @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,druid/*") //忽略资源 } ) public class DruidStatFilter extends WebStatFilter { }
-
在spring boot 启动类上添加@ServletComponentScan注解。
@SpringBootApplication @ServletComponentScan public class MybatisSpringBootAApplication { public static void main(String[] args) { SpringApplication.run(MybatisSpringBootAApplication.class, args); } }
-
-
代码方式
-
直接在自定义滤器类中添加@Component注解后该过滤器就会生效,无需再做其他任何操作。该过滤器会对所有路径进行拦截。
-
定义一个配置类
@Configuration public class FilterConfig { @Bean public FilterRegistrationBean myFilter() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); // MyFilter为自定义的过滤器 MyFilter myFilter = new MyFilter(); filterRegistrationBean.setFilter(myFilter); List<String> urls = new ArrayList<>(); urls.add("/*"); filterRegistrationBean.setUrlPatterns(urls); filterRegistrationBean.addInitParameter("exclusions", "/*.js,/*.gif,/*.jpg,/*.bmp,/*.png,/*.css,/*.ico,/druid/*"); filterRegistrationBean.setName("myfilter.."); return filterRegistrationBean; } }
-
3. 添加监听器
-
注解方式
-
在自定义监听器类上添加@WebListener注解
@WebListener @Slf4j public class TestServletContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { log.info("测试上下文监听初始化"); } @Override public void contextDestroyed(ServletContextEvent sce) { log.info("测试上下文监听销毁"); } }
-
在spring boot 启动类上添加@ServletComponentScan注解
@SpringBootApplication @ServletComponentScan public class SpringboottestApplication { public static void main(String[] args) { SpringApplication.run(SpringboottestApplication.class, args); } }
-
-
代码方式
-
定义一个配置类
@Configuration public class ListenerConfig { @Bean public ServletListenerRegistrationBean<ServletContextListener> myListener(){ // MyListener为自定义的监听器 return new ServletListenerRegistrationBean<>(new MyListener()); } }
-
4. 添加拦截器
-
创建自定义拦截器,通过实现spring提供的HandlerInterceptor接口定义自己的拦截器。
package cn.xiangxu.springboottest.commons.intereceptors; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Slf4j public class TestInterceptor02 implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { log.info("=========调用controller之前=============="); return true; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { log.info("=========调用controller之后=============="); } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { log.info("=========视图渲染之后=============="); } }
-
添加拦截器配置
package cn.xiangxu.springboottest.config; import cn.xiangxu.springboottest.commons.intereceptors.TestInterceptor01; import org.springframework.context.annotation.Configuration; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration public class MyWebAppConfiguer extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { super.addInterceptors(registry); registry.addInterceptor(new TestInterceptor01()).addPathPatterns("/**"); } }
注:本文内容参考自:https://www.cnblogs.com/NeverCtrl-C/p/8191920.html