顺序: filter-->servlet-->interceptor-->controller
何时使用拦截器?何时使用过滤器?
两种方式:
1、使用spring boot提供的filterregistrationbean注册filter
2、使用原生servlet注解定义filter
两种方式的本质都是一样的,都是去filterregistrationbean注册自定义filter
package com.theeternity.common.basefilter; import javax.servlet.filter; /** * @program: apiboot * @description: 封装filter * @author: theeternity zhang * @create: 2019-02-17 13:08 */ public interface mappingfilter extends filter { string[] addurlpatterns(); int order(); }
package com.theeternity.beans.filterconfig; import com.theeternity.common.basefilter.mappingfilter; import lombok.extern.slf4j.slf4j; import org.slf4j.logger; import org.slf4j.loggerfactory; import javax.servlet.*; import javax.servlet.filterconfig; import java.io.ioexception; /** * @program: apiboot * @description: 权限过滤器 * @author: theeternity zhang * @create: 2019-02-17 13:14 */ public class authfilter implements mappingfilter { @override public string[] addurlpatterns() { return new string[]{"/*"}; } @override public int order() { return 0; } @override public void init(filterconfig filterconfig) throws servletexception { } @override public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain filterchain) throws ioexception, servletexception { filterchain.dofilter(servletrequest,servletresponse); } @override public void destroy() { } }
package com.theeternity.beans.filterconfig; import org.springframework.boot.web.servlet.filterregistrationbean; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; /** * @program: apiboot * @description: 注册过滤器 * @author: theeternity zhang * @create: 2019-02-17 13:10 */ @configuration public class filterconfig { @bean public filterregistrationbean registfilter() { filterregistrationbean registration = new filterregistrationbean(); authfilter authfilter=new authfilter(); registration.setfilter(authfilter); registration.addurlpatterns(authfilter.addurlpatterns()); registration.setorder(authfilter.order()); registration.setname("authfilter"); return registration; } }
package com.theeternity.common.baseinterceptor; import org.springframework.web.servlet.handlerinterceptor; /** * @program: apiboot * @description: 封装interceptor * @author: theeternity zhang * @create: 2019-02-15 17:49 */ public interface mappinginterceptor extends handlerinterceptor { string[] addpathpatterns(); string[] excludepathpatterns(); int order(); }
package com.theeternity.beans.interceptorconfig; import com.theeternity.common.baseinterceptor.mappinginterceptor; import org.springframework.stereotype.component; import org.springframework.web.servlet.modelandview; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; /** * @program: boxapi * @description: 跨域拦截器 * @author: tonyzhang * @create: 2018-12-21 14:44 */ @component public class crossorigininterceptor implements mappinginterceptor { @override public string[] addpathpatterns() { return new string[]{"/**"}; } @override public string[] excludepathpatterns() { return new string[0]; } @override public int order() { return 0; } @override public boolean prehandle(httpservletrequest request, httpservletresponse response, object handler) throws exception { logger.info("允许的头信息"+request.getheader("origin")); response.setheader("access-control-allow-origin", "*"); response.setheader("access-control-allow-methods", "*"); response.setheader("access-control-max-age", "3600"); response.setheader("access-control-allow-headers", "origin, x-requested-with, content-type, accept"); //是否允许浏览器携带用户身份信息(cookie) response.setheader("access-control-allow-credentials","true"); return true; } @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.theeternity.beans.interceptorconfig; import org.springframework.beans.factory.annotation.autowired; import org.springframework.context.annotation.configuration; import org.springframework.web.servlet.config.annotation.interceptorregistry; import org.springframework.web.servlet.config.annotation.webmvcconfigurer; /** * @program: apiboot * @description: 拦截器注册 * @author: theeternity zhang * @create: 2019-02-15 17:55 */ @configuration public class interceptorconfig implements webmvcconfigurer { @autowired private crossorigininterceptor crossorigininterceptor; @override public void addinterceptors(interceptorregistry registry) { registry.addinterceptor(crossorigininterceptor).addpathpatterns(crossorigininterceptor.addpathpatterns()); } }
如对本文有疑问, 点击进行留言回复!!
ScrollView和RecyclerView的滑动事件处理
配置JAVA环境+安装Android Studio全过程+踩坑记录
Android P Camera2当SD卡被拔出来自动切换到内部存储
android 多个edittext 判空监听 让Button动态是否可点击
Android开源项目滚轮选择器WheelPicker的基本用法总结
网友评论