着重基础之—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.同时, ...
随机推荐
- c++builder XE7 C++11 C++0x 新语法
Non-static data member initializers 非静态成员变量初始化变得简单,这个XE7 64位编译成功,32位还是不支持 As a simple example, struc ...
- 机器学习入门-贝叶斯中文新闻分类任务 1. .map(做标签数字替换) 2.CountVectorizer(词频向量映射) 3.TfidfVectorizer(TFDIF向量映射) 4.MultinomialNB()贝叶斯模型构建
1.map做一个标签的数字替换 2.vec = CountVectorizer(lowercase=False, max_features=4000) # 从sklean.extract_featu ...
- as3 文档类判断是否被加载
if (!stage) { trace(("被加载->this.parent:" + this.parent)); }else { trace(("单独打开-> ...
- Tomcat 多项目管理
有时我们会在一个服务下存在多个项目的情况,为了统一管理和服务运行安全考虑,有时候我们需要重新部署一个项目但又不能停掉其它项目,就可以用manager进行管理. Tomcat manager和Root访 ...
- eclipse在运行main方法时在console里面报内存溢出的错误解决办法
修改JVM的配置. window-->preferences-->Java-->installedJres选中使用的jdk/jre版本 点击右边的edit在弹出的对话框中的[Defa ...
- Python之类属性的增删改查
#类属性又称为静态变量,或者是静态数据,这些数据是他们所属的类对象绑定的,不依赖于任何类实例 class ChinesePeople: country = 'china' def __init__(s ...
- mysql in 过滤 解决转义问题
IF(headUser!='',instr(concat(',',headUser,','),concat(',',cr.headUser,',')),TRUE);
- WinForm多线程编程与Control.Invoke的应用浅谈
在WinForm开发中,我们通常不希望当窗体上点了某个按钮执行某个业务的时候,窗体就被卡死了,直到该业务执行完毕后才缓过来.一个最直接的方法便是使用多线程.多线程编程的方式在WinForm开发中必不可 ...
- SVD 实现
机器学习相关——SVD分解: http://www.cnblogs.com/luchen927/archive/2012/01/19/2321934.html SVD python实现: import ...
- c# 结构体 集合 复习
添加5个学生的信息到集合中,每个学生都有:学号,姓名,成绩,3个内容,添加完毕后将学生的分数从高到低排列并打印出来,使用结构体 using System; using System.Collectio ...