SpringBoot中省掉了web.xml这样简化了项目同时也减少了项目搭建时的复杂性。网上有springboot加载web.xml的方法。但是个人感觉既然是被去掉的东西,再加上未免太复杂了。
SpringBoot中有相关的实现方法去实现web.xml中的配置功能。
以下介绍如何在springboot中添加自定义的配置
JavaEE中web.xml配置:
<filter> <filter-name>OauthFilter</filter-name> <filter-class>com.sense.sso.oauth.WebFilter</filter-class> <init-param> <param-name>serverAddress</param-name> <param-value>http://localhost:8080/IAM</param-value> </init-param> <init-param> <param-name>clientId</param-name> <param-value>APP001</param-value> </init-param> <init-param> <param-name>clientSecret</param-name> <param-value>wpprkkmsi093jns2sdf4452sdf</param-value> </init-param> </filter> <filter-mapping> <filter-name>OauthFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
|
SpringBoot实现方法
说明:上面web.xml中引用的WebFilter类就是项目启动的时候需要加载的类,也就是你自定义需要实现的方法要写在这里面
WebFilter.java
public class WebFilter 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("自定义实现类的方法"); }
@Override public void destroy() {
} }
|
回顾@Configuration的使用方式。添加@Configuration注解的类中会存在0个或者多个@Bean。被@Bean注解过的方法会在项目启动的时候跟随调用
@Configuration//用来定义 DispatcherServlet 应用上下文中的 bean、 @EnableWebMvc @ComponentScan public class WebConfig extends WebMvcConfigurerAdapter {
@Bean public FilterRegistrationBean SenseSsoOauthWebFilterFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new WebFilter());//创建上面的自定义的WebFilter对象 registration.addUrlPatterns("/*"); registration.addInitParameter("serverAddress", "http://localhost:8080/IAM");//相当于web.xml中的<param-name>、<param-value>。可以添加n个 registration.addInitParameter("clientId", "APP001"); registration.addInitParameter("clientSecret", "wpprkkmsi093jns2sdf4452sdf"); registration.setName("WebFilter");//该Filter的名字,自己随便定义 registration.setOrder(1);//启动时候的优先级 return registration; } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { super.addResourceHandlers(registry); } } |
当使用嵌入式的Servlet容器(Tomcate、Jetty等)时我们通过将Servlet、Filter和Listener声明为SpringBean而达到注册效果;或者注册FilterRegistrationBean、ServletListenerRegistrationBean、ServletRegistrationBean的Bean。
以上是实现的web.xml中Filter标签的对应功能,可以通过FilterRegistrationBean类去实现,详细的方法可以参考spring的官方API