spring boot web filter的使用
来源:互联网 发布:孙俪的淘宝店怎么找 编辑:程序博客网 时间:2024/05/16 12:11
spring boot web filter的使用
作为web的开发人员相信对于filter并不陌生,各种各样的filter都需要在web.xml中配置, 如下图:
而在springboot中将提供两种方式来配置filter:您可以为其提供Spring Bean,也可以启用扫描Servlet组件。
1.1使用Spring bean添加Servlet,过滤器或监听器
要添加一个Servlet,,Filter或者Servlet *Listener提供一个@Bean定义。当您想要注入配置或依赖项时,这可能非常有用。但是,你必须非常小心,
他们不会引起太多其他豆类的渴望初始化,因为它们必须安装在容器中的应用程序生命周期的早期(例如,它不是一个好主意,让他们依赖于你DataSource或JPA组态)。
您可以通过初次使用而不是初始化来初始化它们来解决这样的限制。
在这种情况下Filters,Servlets您还可以通过添加FilterRegistrationBean或ServletRegistrationBean替代底层组件来添加映射和init参数。
[注意]
如果dispatcherType在过滤器注册上指定了否,则它将匹配 FORWARD,INCLUDE和REQUEST。如果异步已经启用,它也会匹配ASYNC。
如果您正在迁移没有dispatcher元素的过滤器,web.xml则需要指定一个dispatcherType:
@Bean
public FilterRegistrationBean myFilterRegistration(){
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setDispatcherTypes(DispatcherType.REQUEST);
....
return registration;
}
禁止注册一个Servlet或Filter
如上所述, any Servlet 或Filterbeans将会自动向servlet容器注册。要禁用特定Filter或Servletbean的注册,请为其创建注册bean,并将其标记为禁用。例如:
@Bean
public FilterRegistrationBean注册(MyFilter filter){
FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.setEnabled(false);
return registration
}
1.2使用类路径扫描添加Servlet,过滤器和监听器
@WebServlet,@WebFilter并且@WebListener注释类可以通过@Configuration使用@ServletComponentScan并指定包含要注册的组件的包来注释类,
从而自动向嵌入的servlet容器注册。默认情况下,@ServletComponentScan将从注释类的包中进行扫描。
本章采用 第一种方法:主要分为两大步:
1.创建一个filter类,实现Filter接口,实现方法写入要处理的逻辑;
2.通过@Configuration注解将filter类加入过滤链
具体实现代码如下:(说明:本例为了方便将filter类以内部类的形式创建,也可单独提取出来作为一个独立的外部类 )
package com.zxl.examples.filter;import org.apache.catalina.filters.RemoteIpFilter;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * Created by Administrator on 2017/7/27. */@Configurationpublic class WebConfiguration { @Bean public RemoteIpFilter remoteIpFilter() { return new RemoteIpFilter(); } @Bean public FilterRegistrationBean testFilterRegistration() { //配置无需过滤的路径或者静态资源,如:css,imgage等 StringBuffer excludedUriStr = new StringBuffer(); excludedUriStr.append("/login/*"); excludedUriStr.append(","); excludedUriStr.append("/favicon.ico"); excludedUriStr.append(","); excludedUriStr.append("/js/*"); FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new MyFilter()); registration.addUrlPatterns("/*"); registration.addInitParameter("excludedUri", excludedUriStr.toString()); registration.setName("MyFilter"); registration.setOrder(1); return registration; }// @Bean// public FilterRegistrationBean testFilterRegistration2() {// //配置无需过滤的路径或者静态资源,如:css,imgage等// StringBuffer excludedUriStr = new StringBuffer();// excludedUriStr.append("/login/*");// excludedUriStr.append(",");// excludedUriStr.append("/favicon.ico");// excludedUriStr.append(",");// excludedUriStr.append("/js/*");//// FilterRegistrationBean registration = new FilterRegistrationBean();// registration.setFilter(new MyFilter2());// registration.addUrlPatterns("/login/login");// registration.addInitParameter("excludedUri", excludedUriStr.toString());// registration.setName("MyFilter2");// registration.setOrder(2);// return registration;// } public class MyFilter implements Filter { private String[] excludedUris; @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest request = (HttpServletRequest) srequest; HttpServletResponse response = (HttpServletResponse) sresponse; System.out.println("this is MyFilter,url :"+request.getRequestURI()); String uri = request.getServletPath(); if(isExcludedUri(uri)){ filterChain.doFilter(srequest, sresponse); }else if(request.getSession().getAttribute("user")!=null){ filterChain.doFilter(srequest, sresponse); }else{ response.sendRedirect(request.getContextPath() + "/login/toLogin"); } } @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub excludedUris = filterConfig.getInitParameter("excludedUri").split(","); } private boolean isExcludedUri(String uri) { if (excludedUris == null || excludedUris.length <= 0) { return false; } for (String ex : excludedUris) { uri = uri.trim(); ex = ex.trim(); if (uri.toLowerCase().matches(ex.toLowerCase().replace("*",".*"))) return true; } return false; } }// public class MyFilter2 implements Filter {//// private String[] excludedUris;//// @Override// public void destroy() {// // TODO Auto-generated method stub// }//// @Override// public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain)// throws IOException, ServletException {// // TODO Auto-generated method stub// HttpServletRequest request = (HttpServletRequest) srequest;// HttpServletResponse response = (HttpServletResponse) sresponse;// System.out.println("this is MyFilter,url :"+request.getRequestURI());// String uri = request.getServletPath();// if(isExcludedUri(uri)){// filterChain.doFilter(srequest, sresponse);// }else if(request.getSession().getAttribute("user")!=null){// filterChain.doFilter(srequest, sresponse);// }else{// response.sendRedirect(request.getContextPath() + "/login/toLogin");// }// }//// @Override// public void init(FilterConfig filterConfig) throws ServletException {// // TODO Auto-generated method stub// excludedUris = filterConfig.getInitParameter("excludedUri").split(",");// }//// private boolean isExcludedUri(String uri) {// if (excludedUris == null || excludedUris.length <= 0) {// return false;// }// for (String ex : excludedUris) {// uri = uri.trim();// ex = ex.trim();// if (uri.toLowerCase().matches(ex.toLowerCase().replace("*",".*")))// return true;// }// return false;// }// }}
- spring boot web filter的使用
- Spring Boot 之web Filter --不支持排序的使用
- Spring Boot 之FilterRegistrationBean --支持web Filter 排序的使用
- Spring Boot 之web Filter --支持排序的使用扩展
- Spring Boot 之FilterRegistrationBean --支持web Filter 排序的使用
- spring-boot使用Filter
- spring boot-使用Filter实现Header认证
- 10.8、spring boot的web应用——servlet、listener、filter的应用
- Spring Boot示例 - 4. 使用Spring Boot和Spring Security构建安全的Web应用
- web Filter中使用spring注入的bean
- web Filter中使用spring注入的bean
- 使用Spring Boot来加速Java web项目的开发
- 使用Spring Boot来加速Java web项目的开发
- 使用Spring Boot来加速Java web项目的开发
- 使用Spring Boot来加速Java web项目的开发
- 使用Spring Boot来加速Java web项目的开发
- 使用Spring Boot来加速Java web项目的开发
- Spring Boot 使用 jetty 作为默认的Web容器
- 使用Flasl-Mail提供电子邮件支持
- static
- HttpClient
- solrCloud新建core或collection失败报Caused by: solr.DataImportHandler错误
- 每日MySQL之002:MySQL server连接与查询
- spring boot web filter的使用
- Git 搭建私有仓库
- 【JavaScript】JavaScript的第2个例子
- 在java中的正则表达式基础
- 运算符重载:赋值、类型转换
- 查找命令find的常见用法
- 漫画算法:判断2的乘方
- UITableView使用基础篇
- Hive 表类型简述