SpringBoot详细研究-03系统集成

SpringBoot详细研究-03系统集成

大家好,又见面了,我是全栈君。

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

SpringBoot详细研究-03系统集成

 

SpringBoot详细研究-03系统集成

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用户登录后可访问。

SpringBoot详细研究-03系统集成
SpringBoot详细研究-03系统集成

 1 spring.activemq.broker-url=tcp://localhost:61616
 2 spring.activemq.user=
 3 spring.activemq.password=
 4 spring.activemq.in-memory=true
 5 spring.activemq.pool.enabled=false
 6 
 7 Maven:
 8         <dependency>
 9             <groupId>org.springframework</groupId>
10             <artifactId>spring-jms</artifactId>
11         </dependency>
12         <dependency>
13             <groupId>org.apache.activemq</groupId>
14             <artifactId>activemq-client</artifactId>
15         </dependency>

View Code

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

SpringBoot详细研究-03系统集成
SpringBoot详细研究-03系统集成

 1 security.user.name=user
 2 security.user.password=
 3 security.user.role=USER
 4 security.require-ssl=false
 5 security.enable-csrf=false
 6 security.basic.enabled=true
 7 security.basic.realm=Spring
 8 security.basic.path=
 9 security.basic.authorize-mode=authenticated
10 security.filter-order=0
11 security.headers.xss=false
12 security.headers.cache=false
13 security.headers.frame=false
14 security.headers.content-type=false
15 security.headers.hsts=all
16 security.sessions=stateless
17 security.ignored=
18 
19 Maven:
20         <dependency>
21             <groupId>org.springframework.boot</groupId>
22             <artifactId>spring-boot-starter-security</artifactId>
23         </dependency>

View Code

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

Tip:

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

 

SpringBoot详细研究-03系统集成

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

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

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

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

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

ActiveMQ

SpringBoot详细研究-03系统集成
SpringBoot详细研究-03系统集成

 1 spring.activemq.broker-url=tcp://localhost:61616
 2 spring.activemq.user=
 3 spring.activemq.password=
 4 spring.activemq.in-memory=true
 5 spring.activemq.pool.enabled=false
 6 Maven:
 7         <dependency>
 8             <groupId>org.springframework</groupId>
 9             <artifactId>spring-jms</artifactId>
10         </dependency>
11         <dependency>
12             <groupId>org.apache.activemq</groupId>
13             <artifactId>activemq-client</artifactId>
14         </dependency>

View Code

Tip:

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

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

RabbitMQ

SpringBoot详细研究-03系统集成
SpringBoot详细研究-03系统集成

 1 spring.rabbitmq.host=localhost
 2 spring.rabbitmq.port=5672
 3 spring.rabbitmq.username=admin
 4 spring.rabbitmq.password=admin
 5 
 6 Maven:
 7         <dependency>
 8             <groupId>org.springframework.boot</groupId>
 9             <artifactId>spring-boot-starter-amqp</artifactId>
10         </dependency>

View Code

Tip:

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

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

 

SpringBoot详细研究-03系统集成

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桥接两个消息通道。

SpringBoot详细研究-03系统集成
SpringBoot详细研究-03系统集成

 1 Maven:
 2         <dependency>
 3             <groupId>org.springframework.boot</groupId>
 4             <artifactId>spring-boot-starter-integration</artifactId>
 5         </dependency>
 6         <dependency>
 7             <groupId>org.springframework.boot</groupId>
 8             <artifactId>spring-boot-starter-mail</artifactId>
 9         </dependency>
10         <dependency>
11             <groupId>org.springframework.integration</groupId>
12             <artifactId>spring-integration-feed</artifactId>
13         </dependency>
14         <dependency>
15             <groupId>org.springframework.integration</groupId>
16             <artifactId>spring-integration-mail</artifactId>
17         </dependency>

View Code

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

 

  • 其他

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

 

参考资料

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

转载于:https://www.cnblogs.com/xiong2ge/p/springboot_systemintegration_detail03.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108488.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 虚拟机桥接模式下设置静态IP地址无法上网

    虚拟机桥接模式下设置静态IP地址无法上网宿主机:win7虚拟机:Fedora24上网:无线路由器+ADSL虚拟机采用桥接模式,之前虚拟机的网卡配置为DHCP模式,通过无线路由器动态分配一个192.168.1.xxx的IP地址,可以上网。由于最近需要虚拟机的IP地址固定,就设置了一个镜头IP地址:192.168.1.30,结果发现虚拟机无法上网了。折腾了半天发现,在vmware的网络编辑器中,不要使用自动,要明确选择桥接到联网的

    2022年6月5日
    55
  • rsyslog详解

    rsyslog详解一、日志介绍日志概念日志是系统用来记录系统及应用程序运行时的一些相关信息的文本文件日志作用日志是为了保存相关程序的运行状态、错误信息等,为了对系统进行分析、保存历史记录以及在出现错误时发现、分析错误使用linux系统日志类型内核信息服务信息应用程序信息二、rsyslog1、rsyslog介绍rsyslog是linux系统中用来实现日志功能的服务。默认已经安装,并且自动启用。作用:主要用来采集日志,不生产日志其特性包括: 支持输出日志到各种数据库,如MySQ

    2022年9月24日
    3
  • CMS和G1收集器

    CMS和G1收集器转自:https://yuanrengu.com/2020/4c889127.html在开始介绍CMS和G1前,我们可以剧透几点:根据不同分代的特点,收集器可能不同。有些收集器可以同时用于新生代和老年代,而有些时候,则需要分别为新生代或老年代选用合适的收集器。一般来说,新生代收集器的收集频率较高,应选用性能高效的收集器;而老年代收集器收集次数相对较少,对空间较为敏感,应当避免选择基于复制算法的收集器。 在垃圾收集执行的时刻,应用程序需要暂停运行。 可以串行收集,也可以并行收集。 如果能做到并发

    2022年5月6日
    30
  • 嵌套对象转map

    嵌套对象转map嵌套对象转map,当对象嵌套层次太深,获取子对象的值及其不便,为解决这一问题,于是对象转mpa,有key就能得到相应的value。解决复杂json情况,尤其是当第三方json过于复杂时候很适合,如央行征信报告等。java代码://测试json,可以为一个Object对像Stringjson=”{\”success\”:0,\”errorMsg\”:\”错误消息\”,\…

    2022年5月17日
    38
  • Windows中Pycharm中配置Qt[通俗易懂]

    Windows中Pycharm中配置Qt[通俗易懂]Qt是什么Qt是Python开发窗体的工具之一,它与python有着良好的兼容性,且可通过可视化拖曳的方式进行窗体的创建,提高开发效率。Qt工具支持Windows,Linux,MacOSX三种操作系统。可用pipinstallpyqt5进行在线安装配置Pycharm由于QtDesigner在设计窗体时,后缀名为ui,需要转为py文件后才可以被…

    2022年8月29日
    3
  • java输入与输出的格式已经一些知识点[通俗易懂]

    java输入与输出的格式已经一些知识点[通俗易懂]每个语句的首字母都要大写,每个语句写完以后要打分号;写单词时不需要写完,写几个字母再按alt+/ 可以出现单词供你选择;输出语句:System.out.println(“”);用户输入(编译完成后在Console里面输入):Scannerin=newScanner(System.in);in.nextInt():用户输入的整数型。变量:和C语言一样需要

    2022年7月8日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号