CAS跨网访问
CAS跨网访问的解决方案
CAS 统一认证,在登录的时候,需要进行重定向,当在同一个局域网下,则可以正常访问,没有问题,一旦出现跨网访问,则会出现无法访问的问题,一般有三种方案解决。
通用的解决方案参考博客nginx的安装参考
实验环境准备
内网穿透工具,NATAPP.CN;
分布式单点登录框架,XXL-SSO;
nginx
nginx headers-more模块
nginx的安装使用WSL Ubuntu作为Linux环境,安装nginx。
安装依赖环境
安装编译环境
1234sudo apt-get install build-essentialsudo apt-get install libtoolsudo apt-get install gcc automake autoconf libtool makesudo apt-get install gcc-c++
安装PCRE库为了nginx重写rewrite
1234567cd /usr/local/srcwget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz ta ...
为什么要使用消息队列
为什么要用消息队列
消息队列(Message Queue)是一种进程间或者线程间的通信方式,存储一系列用户的输入或输出,提供了异步的通信协议,不需要消息的发送者和接收者直接交互。
MQ的应用场景核心的应用分为:解耦、异步、削峰。
解耦场景:A系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?A 系统跟其它各种乱七八糟的系统严重耦合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据发送过来。A 系统要时时刻刻考虑 BCDE 四个系统如果挂了该咋办?要不要重发,要不要把消息存起来?
使用了MQ后的,A系统产生数据,发送到MQ中,哪个系统需要就去MQ中消费即可,A可以不用考虑去维护向谁发送消息。
总结:通过MQ,类似发布订阅的方式,可以使A系统与其他系统解耦。一个系统、模块需要调用多个系统或者模块,互相之间调用复杂,维护麻烦,这个调用又不需要直接同步调用接口,则可以用MQ做个异步解耦。
异步场景:系统A为主要系统,如下单系统,BCD为其他不重要的系统,如下单成功后B向用户发短信,C系统分发物流等,如果用 ...
常用的设计模式
设计模式是软件设计中对常见问题的典型解决方案,每个模式就像一个蓝图,你可以通过它进行定制,来解决代码中特定的设计问题。设计模式不像算法那样提供详细的、明确的实现步骤,以下是深入设计模式的读书笔记。
概念为什么要学习设计模式或许你已从事程序开发工作多年, 却完全不知道单例模式是什么。 很多人都是这样。 即便如此, 你可能也在不自知的情况下已经使用过一些设计模式了。 所以为什么不花些时间来更进一步学习它们呢?
设计模式是针对软件设计中常见问题的工具箱, 其中的工具就是各种经过实践验证的解决方案。 即使你从未遇到过这些问题, 了解模式仍然非常有用, 因为它能指导你如何使用面向对象的设计原则来解决各种问题。
设计模式定义了一种让你和团队成员能够更高效沟通的通用语言。 你只需说 “哦, 这里用单例就可以了”, 所有人都会理解这条建议背后的想法。 只要知晓模式及其名称, 你就无需解释什么是单例。
设计模式的分类常用的设计模式主要分为:
创建型模式,提供创建对象的机制, 增加已有代码的灵活性和可复用性。
结构型模式,介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。
行 ...
详解Spring声明式事务
事务管理,在日常的CRUD开发过程中是必不可少的,Spring为事务管理提供了丰富的功能支持,一般分为:编程式式事务和声明式事务两种形式。声明式事务将具体的事务处理和业务逻辑分开,解耦合,在实际中比较常用,以下介绍声明式事务的使用及其原理。
声明式事务的基本使用使用@Transactional注解来实现声明式事务管理,其原理是使用AOP。第一步,创建事务配置信息,可以使用xml配置,也可以使用@EnableTransactionManagement注解启用事务管理功能。
12345<tx:annotation-driven /><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean>
第二步,将@Tran ...
tomcat控制台或日志乱码
在使用IDEA编写web应用的时候,启动tomcat时,会出现日志乱码的情况,解决方法如下。
IDEA本身控制台的乱码,解决办法:
可以打开Run/Debug Configurations;
VM options中添加-Dfile.encoding=UTF-8;
idea安装路径下的bin目录,修改*.exe.vmoptions,也填上2中的内容。
tomcat日志编码问题,解决办法:
打开tomcat的安装路径,找到/conf/logging.properties文件;
修改这一行配置,java.util.logging.ConsoleHandler.encoding = UTF-8编码改为GBK。
slf4j报错
SLF4J再没引用,没使用的情况下,由于第三方包,报初始化错误。
123SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
解决办法,添加maven依赖:
12345<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>1.7.24</version></dependency>
Linux配置ssh免密码登录
ssh 是一种安全加密的网络协议,用于远程登录,传输的过程中,密码是加密的,加密的方式如rsa,非对称加密,生成了公钥和私钥。免密登录应用十分广泛,如在Github中提交代码时,通过ssh的方式,将本机生成的公钥拷贝到Github网站的sshkey中,可以不用每次验证密码。免密登录远程Linux主机,如何配置这些呢?
本机免密登录首先,生成秘钥对 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa ,其中指定了加密算法,以及生成的私钥和公钥的保存位置:
123.ssh├── id_rsa└── id_rsa.pub
然后将密码插入到认证过的公钥中
12# authorized_keys 可能一开始是空的,公钥按序加入文件的末尾cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
现在,可以通过ssh来登录了ssh localhost,不再需要输入密码了。
远程免密登录远程主机的登录类似,首先在远程主机上生成一个sshkey,同样将公钥添加到authorize_keys文件中, ...
优秀架构师必须掌握的架构思维(转)
架构的本质是管理复杂性,抽象、分层、分治 和 演化 思维是我们工程师/架构师应对和管理复杂性的四种最基本武器。原文地址。
抽象思维对某种事物进行简化描述或表示的过程,只关注要素而忽略具体的细节。在系统架构和设计中,抽象帮助我们从大处着眼(get our mind about big picture),隐藏细节(temporarily hide details)。抽象能力的强弱,直接决定我们所能解决问题的复杂性和规模大小。关于抽象层次的跳跃性,开发过程应该保证代码的抽象层次一致性,保证代码清晰明了。如在电商处理订单过程中,需要的流程如下:
更新库存信息;
打折计算;
支付卡校验;
支付;
送货。上述流程处于同一个抽象层次上,在编写代码的时候,不应该出现一些细节性的问题,如在支付卡校验过程中,出现调用某一银行卡的支付api,这是不正确的,应该调用一个抽象的支付api,而不是细节。
分层思维分层抽象,系统分为若干层次化的模块,每一个层次负责解决一个问题,下层向上层提供服务,一些层次贯穿所有层,被称为共享层。常见的分层模式有TCP/IP协议,操作系统等。
分 ...
MongoDB的使用
MongoDB 是一种非关系数据库,是一种 NoSQL 型数据库,用于应对大数据和分布式系统的数据库,具有高扩展性和分布式,没有复杂的关系模型。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。将数据存储为一个文档,数据结构由键值对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB 简介和安装MongoDB 是一种NoSQL型数据库,使用C++编写,基于分布式文件存储的开源数据库系统。官方下载地址。在 Windows 系统环境下,可以下载安装包或者压缩包,解压后在 bin 目录下找到可执行的文件,其中 mongod.exe 是数据库服务,使用时需要打开,mongo.exe 是MongoDB数据库的控制台,命令终端。另外,该目录下还提供了数据库的状态查看和管理小程序。
MongoDB 服务器的运行*有两种方式运行:命令行* 和 配置服务 **第一种方法是从终端运行 MongoDB 服务器,需要指定数据库的存储路径:
1mongod.exe --dbpath mydbpath\db
第二种方法是编写Win ...
UML基础学习
UML,Unified Modeling Language,统一建模语言,一种有特殊用途的语言。从用途和分类,到简单应用做一个总结。其他学习网站CSDN专栏。在线 UML 工具 ProcessOn。
UML 分类UML 可分为两类:结构型、行为型。结构性的UML有:
类图,显示了系统的静态结构,用于对系统中的各种概念建模,并描绘他们之间的关系,类是相同数据结构行为和关系的一组对象;
对象图,类的实例化;
构件图,将可重用的代码或模块封装成可替换的物理单元,称为构件,描述构件之间的关系;
部署图
包图行为型的图有:
活动图
状态机图
顺序图
通信图
用例图
时间图
类图参考C++中的类,具有类名称、类的属性以及操作。属性和操作对其他类的可见性通过三种方式进行控制,公有私有和保护。类图之间的关系:类与类之间的关系通常有4种,即依赖关系(Dependency)、泛化关系(Generalization)、关联关系(Association)、实现关系(Realization)。参考。