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

     

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

  • 相关阅读:
    C 语言中字符的输入输出
    C 语言 ctype.h 中系列字符处理函数
    C 语言中 for 循环的几种用法
    C 中优先级和关系运算符
    字符串和格式化输入/输出 [printf & scanf]
    C++中关于string类的一些API总结
    两大基本数据类型
    这些时候的总结
    PL/SQL 十进制数转任意进制
    复现题目[CISCN 2019 华东北赛区 Web2 WriteUp](https://www.zhaoj.in/read-6100.html)的一些东西
  • 原文地址:https://www.cnblogs.com/mbailing/p/java-spring-boot-sso.html
Copyright © 2020-2023  润新知