据说杰克船长被黑客盗片了,看来信息安全依然任重而道远,本文以此为引子,来介绍下spring boot对于系统集成方面的支持。

Spring Security提供一套安全框架,通过IOC和AOP来实现安全功能,其涉及两个重要的概念,认证&授权。在Spring中,其应用只需要在一个配置类上注解@EnableWebSecurity并继承自WebSecurityConfigureAdapter即可。

用户认证:内存认证;JDBC认证,提供默认的数据库结构;通用的用户(推荐),实现UserDetailsService。

请求授权:常见安全处理方法包括,anyRequest匹配所有请求路径(支持antMatchers,和正则regexMachers),,anonymous()匿名可访问,access(String)参数EL表达式结果未true时可访问,hasAnyAuthority()任意权限可访问,hasAnyRole任意角色可访问,hasIpAddress任意IP可访问,HasRole角色可访问,permitAll()用户可任意访问,rememberMe允许rem登录,authenticated用户登录后可访问。

 spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=
spring.activemq.password=
spring.activemq.in-memory=true
spring.activemq.pool.enabled=false Maven:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
</dependency>

SpringBoot提供的默认配置,包括自动配置一个内存用户user,忽略/css/**等静态文件的拦截,自动配置securityFilterChainRegistration的Bean,并且对oauth2有很好的支持。

 security.user.name=user
security.user.password=
security.user.role=USER
security.require-ssl=false
security.enable-csrf=false
security.basic.enabled=true
security.basic.realm=Spring
security.basic.path=
security.basic.authorize-mode=authenticated
security.filter-order=0
security.headers.xss=false
security.headers.cache=false
security.headers.frame=false
security.headers.content-type=false
security.headers.hsts=all
security.sessions=stateless
security.ignored= Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

实践中,需要对自己构建的User进行扩展,比如创建一个UserWrapper类,其实现UserDetails接口(关于password与passwordhash,salt),然后提供一个实现了UserDetailsService的类,并注册到sercurityConfig即可。

Tip:

Http会话劫持:http://www.cnblogs.com/baibaomen/p/http-session-hijack.html

异步消息的主要目的是系统间的通信,其涉及两个重要概念,消息代理message broker和目的地destination,当消息发送者发送消息后,消息将由消息代理接管,消息代理保证消息传递到指定目的地。异步消息主要包含两种形式的目的地,分别是队列queue(用于点对点通信)和主题topic(用于发布/订阅式的消息通信)。

点对点式:发送者发送消息,代理获取消息后放入队列,当接收者来接收,消息将被取出,这是这条消息离队。

发布/订阅式:发送者发送消息到主题,而多个消息接收者监听这个主题。

JMS(Java Message Service)即Java消息服务,是基于JVM消息代理的规范,ActiveMQ、HornetQ是JMS的实现。

AMQP(Advance Message Queuing Protocol)也是一个消息规范。但它不仅兼容JMS,也支持其他平台,主要实现由RabbitMQ。

ActiveMQ

 spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=
spring.activemq.password=
spring.activemq.in-memory=true
spring.activemq.pool.enabled=false
Maven:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
</dependency>

Tip:

Docker启动时:docker run -d -p 61616:61616 -p 8161:8161 --name activemq1 cloudesire/activemq

其中61616为消息代理的端口,8161为ActiveMQ管理页面的端口

RabbitMQ

 spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

Tip:

Docker启动时:docker run -d -p 5672: 5672-p 15672:15672 --name rabbitmq1 rabbitmq:3-management

其中5672为消息代理的端口,15672为ActiveMQ管理页面的端口(可以用guest:guest登录)

Spring Integration提供局域Spring的EIP(Enterprise Integration Patterns企业集成模式,ESB?    )的实现,解决不同系统间交互的问题,通过异步消息驱动来达到系统间的松耦合,Spring Integration主要由Message, Channel, Message EndPoint组成,可以看到,除了Channel,其他和消息部分的知识点相同。

Message:由消息体payload和消息头header两部分组成,消息体可以任何数据类型,如XML,json,java对象等。

Channel: MessageChannel顶级接口, PollableChannel具备轮询获得消息,SubscribableChannel发送信息到订阅了MessageHandler的订阅者, PublishSubscribeChannel广播消息给所有订阅者,QueueChannel用一个可以设置大小的队列保存消息,PriorityChannel按照优先级将数据存储到队列,RendezvousChannel确保每个接受者接收到消息后再发送消息,DirectChannel默认的消息通道,允许消息发个一个订阅者,然后阻碍发送知道消息被接受,ExecutorChannel可绑定到一个多线程的taskExecutor。此外,还提供了ChannelInterceptor来处理消息。

MessageEndPoint:是处理消息的组件,可以控制通道路由,可用的消息端点包括ChannelAdapter,其是单向的,入站通道只接受消息,出站通道只输出消息,支持各种类型的协议;Gateway提供双向的请求/返回;Service Activator调用Bean来处理消息;Router根据消息体类型、消息头的值和已定义好的接收表作为条件,来决定消息的传输通道;Filter类似路由,由于决定消息是否可以传递;Splitter将消息拆分处理;Aggregator合并消息;Enricher增强器;Transformer转换器;Bridge桥接两个消息通道。

 Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-integration</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-feed</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mail</artifactId>
</dependency>

Tip:这部分在实验时遇到了一些问题,暂放。

  • 其他

Spring Batch部分,感觉实用性不是很强 ,还是考虑之后学习使用Quartz来做为job的一揽子解决方案。

参考资料

  1. 汪云飞. Spring Boot实战[M]. 北京:电子工业出版社, 2016.

SpringBoot详细研究-03系统集成的更多相关文章

  1. SpringBoot详细研究-02数据访问

    Springboot对数据访问部分提供了非常强大的集成,支持mysql,oracle等传统数据库的同时,也支持Redis,MongoDB等非关系型数据库,极大的简化了DAO的代码,尤其是Spring ...

  2. SpringBoot详细研究-05微服务与拾遗

    这将是SpringBoot学习系列的最后一篇文章,主要涉及Spring Cloud和JHispter两个知识点,都具有一定综合性,需要多加实践加强理解. Spring Cloud 微服务Microse ...

  3. SpringBoot详细研究-04部署测试与监控

    这部分的内容实际就是devops的主要工作内容,当然一名合格的程序要也需要掌握这部分的知识. 热部署 简单来说,在开发时,修改了任何的代码,IDE将自动编译运行及发布:在发布时,当前发布不影响线上服务 ...

  4. SpringBoot详细研究-01基础

    Springboot可以说是当前最火的java框架了,非常适合于"微服务"思路的开发,大幅缩短软件开发周期. 概念 过去Spring充满了配置bean的xml文件,随着spring ...

  5. 带着新人学springboot的应用03(springboot+mybatis+缓存 下)

    springboot+mybatis+缓存,基本的用法想必是会了,现在说一说内部大概的原理. 稍微提一下mybatis,只要导入了mybatis的依赖,那么有个自动配置类就会生效,你可以去mybati ...

  6. springboot 详细配置2

    # =================================================================== # COMMON SPRING BOOT PROPERTIE ...

  7. 关于TileBrush中Viewbox,Viewport以及Stretch,AlignmentX/Y的详细研究

    我们知道TileBrush是WPF中一个战斗力爆表的虚基类,从它派生出的DrawingBrush,ImageBrush和VisualBrush在WPF图形编程中发挥着重要作用.然而关于TileBrus ...

  8. 带着萌新看springboot源码03

    上一节讲到了快速新建一个springboot应用,以及springboot的自动配置类起作用的时机,并且一起看了一个自动配置类的源码. 这一节我们来粗略看看当用户在浏览器输入一个url,怎么样返回一个 ...

  9. MySQL:对于几个测试题的详细研究

    最近在做MySQL作业时候遇到了很多问题,MySQL作业链接:https://www.cnblogs.com/wj-1314/p/9213885.html 所以下面谈一下稍微难一点的数据库问题,我们需 ...

随机推荐

  1. java基础基础总结----- 随机数(产生四个随机数)

    前言:在开发的时候经常会遇见,一些验证码登录,其实这些东西,很简单.我曾经开发过一个验证码登录的页面,那时用的插件.但是作为一个合格的开发者,要了解其内部的核心知识,有些东西,可以不深入了解,但是要做 ...

  2. java生成棋盘

    第一步:新建java项目,具体的命名,看下面的文件结构. 第二步:代码区 DrawChessBoard类: package com.hp.chenyanlong; import java.awt.Gr ...

  3. yolo详解

    文章<You Only Look Once: Unified, Real-Time Object Detection>提出方法下面简称YOLO. 目前,基于深度学习算法的一系列目标检测算法 ...

  4. properties编程示例

    package com.lovo.props; import java.io.FileInputStream;import java.io.FileNotFoundException;import j ...

  5. vue中的this指向问题

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Javascript Image Slider 插件注册机

    Javascript Image Slider 是个不错的轮播插件,兼容 IE 7.0+, Firefox 1.5+, Chrome 1.0+, Safari 3+, Opera 9.0+, Nets ...

  7. html5 canvas旋转

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. HDU 1869 六度分离 最短路

    解题报告: 1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象(small world phenomenon)”的著名假说,大意是说,任何2个素不相识的人中间最多只隔着6个人, ...

  9. Oracle 基本操作符

    1.一般操作符 (1)!= 不等于 select empno,ename,job from scott.emp where job!='manager' (2)^= 不等于 select empno, ...

  10. 使用Cobbler批量部署Linux和Windows:CentOS/Ubuntu批量安装(二)

    通过前面服务端的部署,已经配置好了 Cobbler Server 端,接下来开始进行 CentOS/Ubuntu 的批量安装,在进行 CentOS/Ubuntu 批量安装时,也需要通过Cobbler来 ...