着重基础之—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的配置形式转换成了额代码的方式来实现,但是思路活整体流程是一致的.
对不起,我又当了回资料的搬运工,但是很有收获,每次写博客的过程就是一个温故而知新的过程,也有利于一些知识的巩固.还是那句话,不忘初心,好了,就写到这里,我是百灵
着重基础之—Spring Boot 编写自己的过滤器的更多相关文章
- .NET CORE与Spring Boot编写控制台程序应有的优雅姿势
本文分别说明.NET CORE与Spring Boot 编写控制台程序应有的“正确”方法,以便.NET程序员.JAVA程序员可以相互学习与加深了解,注意本文只介绍用法,不会刻意强调哪种语言或哪种框架写 ...
- Spring Boot 编写入门程序
1. SpringBoot 入门 快速创建独立运行的Spring项目以及与主流框架集成; 使用嵌入式的Servlet容器,应用无需打成WAR包; starters自动依赖与版本控制; 大量的自动配置, ...
- 从0开始用spring boot编写分布式配置中心-peppa
欢迎大家一起来编写peppa github地址: github 交流群: 目前市面上比较流行的分布式配置中心有disconf.apollo,用起来还是比较方便的,然而由于在权限管理这块做得不够好,导致 ...
- Spring Boot基础:Spring Boot简介与快速搭建(1)
1. Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建.运行.调试.部署等. Spring Boot默认使用tomca ...
- 寻找写代码感觉(三)之使用 Spring Boot 编写接口
一.前言 项目配置完之后,接着就是写接口了,那咱们就开始吧. 二.项目配置补充知识点 上篇文章写的是关于项目属性配置的一些知识,这里针对上次遗忘内容进行补充如下: 2.1.获取配置文件的值 在appl ...
- 【原】spring boot添加cros全局过滤器
新增一个过滤器类并实现filter接口 public class CorsFilter implements Filter { final static org.slf4j.Logger logger ...
- 《深入实践Spring Boot》阅读笔记之一:基础应用开发
上上篇「1718总结与计划」中提到,18年要对部分项目拆分,进行服务化,并对代码进行重构.公司技术委员会也推荐使用spring boot,之前在各个技术网站中也了解过,它可以大大简化spring配置和 ...
- spring boot基础学习教程
Spring boot 标签(空格分隔): springboot HelloWorld 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新 ...
- Spring Boot 2.x基础教程:使用Flyway管理数据库版本
之前已经介绍了很多在Spring Boot中使用MySQL的案例,包含了Spring Boot最原始的JdbcTemplate.Spring Data JPA以及我们国内最常用的MyBatis.同时, ...
随机推荐
- win2008 server ping不同
win2008 server ping不同,网络正常. 下图可以解决!!!
- for 命令详解
FOR有4个参数 /d /l /r /f 他们的作用我在下面用例子解释 FOR /L %%variable IN (start,step,end) DO command [comman ...
- AS3 os与version 区别 使用Capabilities类获取Flash Player的信息
AS3中flash.system.Capabilities类提供诸多静态的只读属性来描述应用程序当前所运行在的系统和运行时信息,如Flash Player,Adobe AIR,Flash Lite.通 ...
- OTS parsing error: invalid version tag woff和ttf文件被Filter拦截
从服务器下载的字体文件放在本地,执行无法展示iconfont,浏览器控制台报出 Failed to decode downloaded font: http://127.0.0.1:8080/mhr/ ...
- 13 python logging模块
原文:http://www.cnblogs.com/dahu-daqing/p/7040764.html 1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日 ...
- 移去OleContainer的黑边框
//禁止双击打开word编辑 olecontainer1.AutoActivate := aaManual; //禁止右键菜单 olecontainer1.AutoVerbMenu := False; ...
- out对象以及网上答题系统
out对象的主要功能是向客户输出响应信息,其主要方法为“print()”,可以输出任意类型的数据,HTML标记可以作为out输出的内容. 代码: 程序截图
- ArcGIS案例学习笔记2_1
ArcGIS案例学习笔记2_1 联系方式:谢老师,135_4855_4328,xiexiaokui#qq.com 时间:第二天上午 案例1:学校选址 内容:栅格数据分析 教程:pdf page=323 ...
- python文件的只读,只写操作
只读:r rb(bytes类型数据) 只写:w wb(bytes类型数据) 在文件最后追加: f = open('log',mode='a',encoding='utf-8') f.write('这里 ...
- 代码重构:用工厂+策略模式优化过多的if else代码块
最近在工作中优化了一段冗余的if else代码块,感觉对设计模式的理解和运用很有帮助,所以分享出来.鉴于原代码会涉及到公司的隐私,因此就不贴出来了.下面以更加通俗易懂的案例来解析. 假如写一个针对员工 ...