着重基础之—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的配置形式转换成了额代码的方式来实现,但是思路活整体流程是一致的.

 

  对不起,我又当了回资料的搬运工,但是很有收获,每次写博客的过程就是一个温故而知新的过程,也有利于一些知识的巩固.还是那句话,不忘初心,好了,就写到这里,我是百灵

posted @ 2019-01-25 18:26  jerry-Tom  阅读(911)  评论(0编辑  收藏  举报