freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

java安全基础-spring框架
Notadmin 2023-02-16 17:53:46 150068
所属地 上海

Spring简介

广义上来说,Spring不是一个单层的框架,而是类似一个平台或者生态体系。在这个平台或者生态体系中,可以将Struts、Hibernate等单层框架最佳的方式融合在一起,为企业级应用提供完美的解决方案。

狭义上说,Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。Spring就是一个开源的轻量级的控制反转(IoC)和面向切面(AOP)的容器框架


控制反转(IOC):软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准,划分模块的一个准则就是高内聚低耦合,Spring通过控制反转技术降低了耦合度。

面向切面(AOP):Spring支持面向切片的编程,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发,应用对象只需实现业务逻辑,它们并不负责(甚至是意识)其他系统级关注点,例如日志或事务支持。

容器:容器就是用来装东西的。Spring容器包含并管理应用对象的配置和生命周期

框架:Spring可以将简单的组件配置、组合成为复杂的应用,相当于是一个脚手架,开发者要做的就是把组件放进去,实现业务逻辑。


spring技术栈

项目名称

描述

Spring Data

Spring 提供的数据访问模块,对 JDBC 和 ORM 提供了很好的支持。通过它,开发人员可以使用一种相对统一的方式,来访问位于不同类型数据库中的数据。

Spring Batch

一款专门针对企业级系统中的日常批处理任务的轻量级框架,能够帮助开发人员方便的开发出健壮、高效的批处理应用程序。

Spring Security

前身为 Acegi,是 Spring 中较成熟的子模块之一。它是一款可以定制化的身份验证和访问控制框架。

Spring Mobile

是对 Spring MVC 的扩展,用来简化移动端 Web 应用的开发。

Spring Boot

是 Spring 团队提供的全新框架,它为 Spring 以及第三方库一些开箱即用的配置,可以简化 Spring 应用的搭建及开发过程。

Spring Cloud

一款基于 Spring Boot 实现的微服务框架。它并不是某一门技术,而是一系列微服务解决方案或框架的有序集合。它将市面上成熟的、经过验证的微服务框架整合起来,并通过 Spring Boot 的思想进行再封装,屏蔽调其中复杂的配置和实现原理,最终为开发人员提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。

Spring框架结构


Spring由20多个模块组成,可以分为:

核心容器(core container):包含spring-core、spring-beans、spring-context、spring-context-support和spring-expression(SpringExpression Language)这些模块。spring-core和spring-beans构成了框架最基础的部分,包括控制反转和依赖注入功能。spring-context是基于spring-core和spring-beans构建的,提供了一种以框架风格来访问对象的方式,类似于JNDI注册。ApplicationContext接口是spring-context的焦点。spring-context-support为集成第三方库(如定时器Quartz)提供支持。spring-expression提供了一种强大的表达式语言,可以在运行时查询和操作对象。

数据访问/集成(data access/Integration):数据访问/集成层包含JDBC(spring-jdbc)、ORM(spring-orm)、OXM(spring-oxm)、JMS(spring-jms)和事务(spring-tx)模块。

web:Web层包含spring-web、spring-webmvc、spring-websocket和spring-webflux模块。其中,spring-web提供了面向Web集成的基本特性,比如文件上传功能。Spring-webmvc模块包含了Spring的MVC和REST Web Service实现。spring-webflux是一个新的非堵塞函数式Reactive Web框架,可以用来建立异步的、非阻塞、事件驱动的服务,并且扩展性非常好。

面向切面编程(AOP,AspectOriented Programming):spring-aop模块提供了一个AOP面向切面编程的实现。spring-aspects模块提供与AspectJ的集成。spring-instrument模块提供一些类级的工具支持和ClassLoader级的实现,用于服务器。spring-instrument-tomcat模块针对tomcat的instrument实现。

设备(Instrumentation)

消息发送(Messaging):从Spring 4开始包含了一个spring-messaging模块,对Spring集成项目Message、MessageChannel和MessageHandler进行了重要的抽象,是基于消息发送应用的基础。

测试(Test):Spring-test模块支持Spring组建JUnit和TestNG的单元测试和集成测试。


Spring MVC

javaEE体系结构包括4层,从上到下分别是应用层,web层,业务层,持久层。

Spring是业务层的框架

Mybatis是持久层的框架

spring MVC是web层的框架

MVC框架:MVC(Model View Controller)是模型(Model)-视图(View)-控制器(Controller)的缩写

MVC模式把用户界面交互分拆到不同的三种角色中,使应用程序被分成三个核心部件:Model(模型)、View(视图)、Controller(控制器)。它们各自处理自己的任务:

(1)模型:模型持有所有的数据、状态和程序逻辑,独立于视图和控制器。

(2)视图:用来呈现模型。视图通常直接从模型中取得它需要显示的状态与数据。对于相同的信息,可以有多个不同的显示形式或视图。

(3)控制器:位于视图和模型中间,负责接受用户的输入,将输入进行解析并反馈给模型,通常一个视图具有一个控制器。


Spring MVC的处理流程

将浏览器输入的url字符串转化成眼前看到的html页面 。

1)用户发送请求到前端控制器DispatcherServlet。在DispatcherServlet中维护着一个表,存放的是HandlerMapping对象list

2)DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3)处理器映射器找到具体的处理器Handler。handler其实指的就是Controller

4)DispatcherServlet调用HandlerAdapter处理器适配器

(5)HandlerAdapter经过适配调用具体的处理器Handler(Controller,也叫后端控制器)。

(6)Controller执行完成,返回ModelAndView。

(7)HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

(8)DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

(9)ViewReslover解析后返回具体View。

(10)DispatcherServlet根据View进行渲染视图(将模型数据填充至视图中)

(11)DispatcherServlet响应用户。


spring中过滤器(filter),拦截器(interceptor)和切面(aop)执行顺序

过滤器:过滤器是服务端的一个组件,是基于servlet实现从客户端访问服务端web资源的一种拦截机制,对请求request和响应response都进行过滤,依赖于serverlet容器,使用时,实现Filter接口,在web.xml里配置对应的class还有mapping-url。

拦截器:拦截器,顾名思义,它的作用就是拦截,这个要和过滤器区分开,过滤器依赖serverlet容器,获取request和response处理,是基于函数回调(框架本身调用的,它会遍历所有注册的过滤器,并且一一调用doFilter()),简单说就是“去取你想取的”。拦截器是通过Java反射机制来拦截web请求,是“拒你想拒绝的”,它只拦截web请求,但不拦截静态资源。

切面:相比过滤器,拦截器能够知道用户发出的请求最终被哪个控制器处理,但是拦截器还有一个明显的不足,即不能够获取request的参数以及控制器处理之后的response。这时可以用切面。


spring框架从view层接收数据

从URL中传值到controller

1)常见的url中会是“?name=XXX&pwd=XXX”这种,如果想获取“name,pwd”,可以使用@RequestParam。假如是可选参数,可以设置required=false,默认是true,value也要与url的对应。

2)有的url的格式是url/param1/param2,这种获取值可以使用@PathVariable。


从view传递数据到controller(POST)

1)直接将请求参数名作为Controller中的方法的形参

2)使用Pojo对象

如果请求参数有好多个,都放在Controller方法的形参中时函数会很长,一般情况下会把参数封装成对象进行传递。SpringMVC会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值,支持级联属性,如address.province、address.city等。

为了演示如何使用Pojo对象,首先在com.demo.model包中定义User对象,该对象中有两个属性—— name和pwd。

3)使用原生的servlet API 作为Controller 方法的参数


总结

上面是spring的一些基础知识,要学好java安全,这些知识也是必须要掌握的。

# web安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 Notadmin 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
Notadmin LV.6
微信公众号:信安路漫漫
  • 87 文章数
  • 153 关注者
浅谈SSO认证原理及常见安全问题
2025-03-25
微信小程序测试技巧总结
2025-03-13
验证机制常见的问题
2025-03-10
文章目录