着重基础之—Spring Boot 编写自己的过滤器
Spring Boot 编写自己的"过滤器"
又好久没有写博客进行总结了,说实话,就是 "懒",懒得总结,懒得动.之所以写这篇博客,是因为最近对接公司SSO服务的时候,需要自定义拦截器,spring mvc 中xml的配置文章可以在网上找到很多,但是由于我用的是 Spring boot ,你也知道, Spring Boot 简化了很多配置文件,同时也整合了很多注解.面对新的需求,我匆忙间急得各种查找 Spring Boot 下 Web.xml 的配置文件如何加载.缺乏理性思考的后果就是走入了误区.浪费了些时间.
其实Spring Boot 对于 web.xml类的配置文件都实现了通过编码来代替,比如通过 @Configuration 我们可以进行自定义的配置 等等.但是面对公司业务文档中提到的解决方案是通过web.xml来配置拦截器来解决的,所以一直用着Spring boot的同时,还非要嫁接web.xml.整个问题的解决思路不清晰.所以再次告诫自己,遇事还是要冷静,急于达到结果的后果往往是浪费了时间和精力,问题却没有解决,如果您现在在看这篇博问,我想您一定是遇到了同类问题,别急,先休息休息,冷静一下,保持inner peace.
开始说到 Spring Boot 自定义过滤器前,我们不得不说一下 Servlet,关于Servlet 的解释,我觉得百科上的解释比较准确些:
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。
Servlet就像是一个容器,里面有各种组件,采用"请求-响应"的模式来提供web服务,既然是容器,就意味这我们可以放置一些自定义的组件和服务
这里有几个概念,我记录下,大家可以顺着记忆回忆回忆,面试也会经常问到的关键词,"Web服务器","Servlet","Tomcat" ,其实最会被问到的应该是"Servlet"和"Tomcat"的关系.
上代码:
1.记得创建类文件 SsoFilterManager ,通过 @Service 标注为服务,代码我们自定义了自己的过滤器 "SSOWebRequiredFilterV2Register",SSOWebRequiredFilterV2的类其实是我对接服务方提供的一个类,这个类实现了Filter,并重写了doFilter 的方法,同时我们也配置了拦截地址:"/sso/account/safe/*",那么通过这个地址来的请求的请求都会交由SSOWebRequiredFilterV2的类来处理
@Service public class SsoFilterManager { @Bean(name = "SSOWebRequiredFilterV2Register") FilterRegistrationBean SSOWebRequiredFilterV2Register() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); SSOWebRequiredFilterV2 ssoWebRequiredFilterV2 = new SSOWebRequiredFilterV2(); registrationBean.setFilter(ssoWebRequiredFilterV2); registrationBean.addUrlPatterns("/sso/account/safe/*"); return registrationBean; } }
2.SSoServletManager 也要单起一个类文件,通过ServletRegistrationBean 来注册一个servlet,STSServlet 也是我对接服务方提供的Servlet服务,他继承了HttpServlet,并且扩展了doGet的方法,"/sso/account/sts" 地址请求将交由STSServlet来处理.
@Service public class SSoServletManager { @Bean public ServletRegistrationBean STSServerletRegister(){ STSServlet stsServlet = new STSServlet(); ServletRegistrationBean registration = new ServletRegistrationBean(stsServlet); registration.setEnabled(true); registration.addUrlMappings("/sso/account/sts"); return registration; } }
SSO类的业务对接,主要是引入SSO服务方的相关包,然后配置拦截器,相应的按照服务提供方的要求配置一下回调地址,即可完成,Spring Boot 的对接无非是将以往Web.xml的配置形式转换成了额代码的方式来实现,但是思路活整体流程是一致的.
对不起,我又当了回资料的搬运工,但是很有收获,每次写博客的过程就是一个温故而知新的过程,也有利于一些知识的巩固.还是那句话,不忘初心,好了,就写到这里,我是百灵