- 博客(104)
- 资源 (5)
- 收藏
- 关注
原创 如何正确理解api网关
微服务这么火,随之api网关常常被提到。那么什么才是api网关?这个问题也一直困扰着我。前几周在csdn数据库大会上与沪江的一个架构师就这个问题探讨了一下。使我对于api网关的认识清晰了很多,所以在本文梳理一下我的思路并总结,希望能够帮助到还一直迷糊的朋友。使用api网关的原因在网上关于说明使用api网关的原因,无外乎如下几种:负载均衡减少客户端与服务端的直接调用容错服务发现与注册统一认证
2017-06-18 20:06:40
18581
原创 spring中aop:pointcut的expression的理解
spring的声名式事务,想必大家都很熟悉,之前我也自认为很熟悉。两天前帮同事调试了一段关于事务的代码,而事务采用的正是spring的声名式事务控制方式来管理。但是事务却不起作用,顿时蒙圈了,查了一下spring配置,其中aop:pointcut 中expression的值与execution(* a.b.**.service.support.*.*(..))类似,最后将表达式改为execut
2017-06-16 23:55:45
729
原创 flume概念入门
flume一句话理解说是关于数据的管道处理开箱即用框架。flume agent的三个基本概念即为:source ,channel,sink.即数据读取,数据处理,数据写入三个阶段。要作数据处理,首先要解决的是数据收集的问题。如果这个问题解决不了,根本谈不上数据的处理。flume的source帮我们解决了这个问题,并且对于数据读取的吞吐量的问题,也顺便给我们解决了。flume channel作为
2017-02-18 01:03:32
422
原创 spark streaming与spring batch批处理
之前很不理解什么是流计算。那么流计算中的流,如何去理解?因为把数据看作是源源不断的流,那么数据就没有起始与结尾,那么如何去处理它呢?这几天看了 spark快速大数据分析 这本书受益颇丰,思考了一下得出如下结论:流计算中的”流“指的是把数据作为一种抽像流的方式。spark streaming 将源源不断的数据流以流的形式进行处理。但是我们常说的流计算,个人理解指的数据以流的形式输入到spar
2017-02-18 00:38:09
5678
原创 oracle 分页sql语句的深入理解
从oracle数据里向外迁移大量数据,有多种方法。其中一种就是应用jdbc连接oracle,写代码向外分页提取。
2017-02-07 13:18:26
712
原创 spring batch入门
spring batch是什么?它是一个批处理框架。任何系统总会积累数据,对于积到的数据,老板就会要求作报表、作统计、作分析,那么批处理就这么产生了。
2017-02-05 01:25:56
420
原创 关于json的理解
关于json的理解可能是写java时间太长了,满脑子都是面向对象。所以的有东西都是对象。对于json一直都没有太感冒,只是把它当作一种数据格式,类似与xml.前段时间在思考一个问题,android与ios开发在调用后台服务,如何才能像java rpc服务调用一样方便。这个问题一直没有答案(我主要是开发后台国架构,对于手机开发是不太清楚)。但是我知道,http+json 能够解决前后端的调用
2017-02-05 00:52:17
536
原创 关于存储过程number型参数初始化问题
今天处理数据,遇到一个诡异的现象。基本的情况是,利用oracle存储过程,将一个oracle数据库表t_a,根据t_b记录,进行更新。因为表的数据量有点大(大约400多万),所以就想着计数,分批提交。所写的存储过程大体逻辑就是如下:declare lv_number(10);beginfor x in (select id from t_b) loop update
2016-10-27 21:35:52
5705
原创 mongodb 3.2.7版本 的分片集群安装demo
下面的作法,是在一台机器上,搭建一个mongodb分片集群。所有的mongod,mongos实例均运行在一台机器上,原因是目前手头没有多余的机器,所以只能在一台服务器上,共运行12个mongod实例(9个用于副本集,3个用于配置),1个mongos实例,为了防止端口、路径、文件冲突所以进行了细心的设计。另外也只是学习mongodb的分片集群的安装,所以也就没有搞太多的机器。操作步骤cd
2016-07-20 13:50:33
1871
原创 tomcat源代码调试-maven篇
最近一直想了解关于tomcat的代码的逻辑,原先只是静态的看看源代码,遇到想不明白的,直接找到相关的代码看看,但是没有动态的对于tomcat的代码进行eclipse调试。因为tomcat代码是使用ant进行build的,不能直观调试,有点费事一直都没有作。今天终于抽出时间把tomcat源代码导入eclipse,并进行相应的运行。在将代码导入eclipse,并进行启动成功,整个这个过程中,我遇到了好
2016-05-25 22:40:41
2764
原创 应用层数据库读写分离--续
前一段时间给系统出关于数据库的读写分离,利用spring的切面功能与spring的数据源动态路由进行数据的切换,具体不详述,请参见应用层数据库读写分离db-loadbalance现在我想说的是,这个方案并不好。因为它的业务侵入性太强。当然在业务架构上,进行整改没有侵入性那是不可能的。但是我们可以作的更好一点,让业务侵入性更少一点。最近一段时间,一直在思考,如何能够更好的解决这个问题
2016-04-29 21:38:56
1270
原创 应用层数据库读写分离db-loadbalance
web应用中,最先遇到性能瓶颈的就是数据库了。对于解决这个性能问题,首选方案就是数据库的读写分离。这里不谈如何构建数据库的读写分离方案,想谈的是当我们有了数据库的读库与写库如何进行读写分离。如果数据库本身就提供读写分离,或者说数据库本身支持读写分离,那么对于用户来说那是再好不过了,比如oracle rac就可以。另外还有mysql replication 驱动,当然它需要与应用事务结合。在此想
2016-02-05 21:28:01
1662
原创 配置metaq扩展log4j发送消息的坑
为什么要配置log4j发送消息呢?主要是将现在系统的日志都集中管理,而不是分散在各个系统中,对于分布式系统更是如此。但是始终测试不成功现在回想一下不成功,主要的原因就是对于每个组件不熟悉不理解其原理。坑1:zookeeper没有配置myid下载的zookeeper 压缩包,在win7下解压了之后,不作任何配置好像就能启动,启动metaq也可以连上,但是客户端通过zookeepe
2016-01-30 17:23:05
1073
原创 java web用户请求过程原理的另类剖析
浏览器发出请求,因为浏览器应用http网络协议,所以发出了满足http协议的请求,则必须有一个实现了http协议的服务器来接收;在服务端,为了接收一个http协议请求,则服务器应具有如下功能:a.实现http协议。则浏览器的发出的http请求,被服务器接收了;服务器将http请求进行解析,获取了相应的参数;b.然后根据参数从服务器中获取相应的内容返回浏览器。由于
2015-10-18 08:28:21
1445
原创 spring security与cas 集成(中)续
继上一个篇spring security与cas 集成(中) 所述,本文我们进行spring security的资源管理的扩展,从上篇的spring-security.xml的配置文件中我们可以清晰的看到关于用户的管理,就是 这个配置中,一共有两个方面的用户信息,一是用户的基本信息,比如name,password; 二是这个用户的基本权限
2015-04-30 22:53:30
2767
原创 cas入门之三十二: jpa ticketregistry在实际应用的一个bug
项目所应用的cas 3.5.2,运行环境为tomcat7.0.52.因项目需要,所以将cas ticket经jpa持久化到oracle 11g 数据库。根据这个cas 3.5.2的pom.xml文件,所应用的hibernate jar罗列如下:hibernate-commons-annotations-4.0.1.Final.jarhibernate-core-4.1.0.Final.
2015-04-25 20:07:43
5750
原创 spring security与cas 集成(中)
上一篇对于spring security与cas集成中涉及的名词,认证与授权进行简单说明,现在将spring security与cas集成的配置文件简单贴上来,这其中所需要的jar太多了,主要涉及cas client 3.1,spring security 3.2, spring security-cas client,spring 3.2这几类jar包。主要配置如下:web.xm
2015-04-25 19:58:01
9796
原创 spring security与cas 集成(上)
spring security想必大家都听说过,我在2010年的时候,也应用过,当时是2.0版本。后来因为它太繁琐,就放弃了,改为自己实现的框架。现在新公司应用它进行系统的权限管理,所以有必要复习一下。在进行spring security的描述之前,我澄清一下,系统的认证与授权两个概念。因为在公司中,有好多同事搞不清楚两个概念,各自是干什么的。当然本文也不打算把这个讲的太抽象,一般化,而只
2015-04-19 21:35:43
4338
原创 cas 入门之三十一:cas 认证处理器-JAAS配置示例
关于cas 的jaas认证,有之前定过一写过一篇,但是那篇没有详细的描述其中的配置情况,况且也有错误,在此对大家表示歉意。下面我将以前作的demo,整理成本文,也算是对前一篇的补充。对于cas的jaas的认证,按以下步骤操作(因为我对其他web服务器不太熟悉,所以仍以tomcat配置为例,系统环境是windows7):1.将原版的cas 以http形式发布至tomcat,并测试是否成功
2014-09-19 21:08:01
3374
原创 cas 入门之三十:cas 集群tomcat session组播复制
cas 的运行环境是tomcat,cas的集群主要分为两部分,一是登录过程中session的集群,二是登录之后产生的ticket的集群。对于登录之后产生的ticket的集群,则相对容易,根据我前几篇文章可以找到答案,比如将ticket 以jpa的形式存到外部数据库即可以。那么对于登录过程中session的集群,对于tomcat则进行session复制。tomcat的session复制目前有
2014-09-16 21:00:10
4903
原创 cas入门之二十九:cas 集群简介
cas 的运行环境是tomcat,cas的集群主要分为两部分,一是登录过程中session的集群,二是登录之后产生的ticket的集群。对于登录之后产生的ticket的集群,则相对容易,根据我前几篇文章可以找到答案,这两部分可以通过组合完成,达成相应的目的。对于cas ticket集群,目前测试通过的有三种方式1.jpa ticket repositry 参看2.echcache
2014-09-16 20:49:10
9472
2
原创 cas入门之二十八:services管理控制台
什么是cas services管理控制台?想想一种情况,当你搭建好了一台cas服务器,大家知道了cas的访问地址,那么你能否有能力控制住哪些应用才能够经过你搭建的cas服务器进行认证吗?你可能会说,大家不会乱连,进行认证的。再想想一种情况,如果经过后台监控,发现有一个应用链接经过你的cas应用进行认证,一下就让你的cas服务器cpu 100%,那么你如何去控制这个链接呢?现在我很高
2014-09-10 20:33:25
9561
2
原创 cas入门之二十七:person directory(中)
在很多情况下,需要从多个数据源中获取用户信息,然后合并相关的信息返回给客户端。在person directory中有两种方式来解决这个问题,一是MergingPersonAttributeDaoImpl, 即将多个IPersonAttributesAttributeDao获取到的用户信息,进行合并成一个结果集,默认是将几个结果集相同属性的合成在一起,然后返回给客户端;另一个是Cas
2014-09-04 22:02:04
2999
原创 cas 入门之二十六:person directory(上)
当用户成功认证之后,cas服务器向客户端返回尽量多的用户信息回去,默认是只返回用户名,当需要返回更多的信息时,就需要用到person directory。在用户认证成功之后,cas服务器有一步是将credentials向Principal转化的过程,这个工作是由credentialsToPrincipalResolvers完成,参见 认证管理器。cas 应用的默认配配置是:
2014-09-04 22:01:34
3211
原创 cas入门之二十五:ticket清理器
当ticket存储器,没有能力管理ticket的状态时,则需要ticket清理器。默认的内存ticket存储器,jpa存储器等都需要ticket清理器;memecached ,ehcache等存储器则不需要ticket清理器。默认情况下,ticket 清理器配置在cas/WEB-INF/spring-configuration/ticketRegistry.xml文件中,如下所示:
2014-09-04 21:57:21
5199
1
原创 cas入门之二十四:ticket的过期策略
cas 提供了可插拔式的ticket过期策略框架用于tgt和st。在cas应用中,tgt和st的过期策略配置默认在cas/webapp/WEB-INF/spring-configuration/ticketExpirationPolicies.xml文件中。在cas的过期策略中,并没有明确指出哪一种ticket应用于哪一种过期策略,但是我们根据类名,还是能够进行区分的。但是并不能说明这个过期策
2014-08-19 23:00:04
27717
原创 cas入门之二十三:单点登出基本机制
cas支持单点登出了,那么它的基本机制是什么呢?当用户经cas认证成功之后,就可以访问集成于cas的所有应用,而无需登录。那么认证是基于cookie的,因为cas在cookie是放了tgt,这样用户就可以无须二次登录,就可以访问另外的应用。但是cas为了安全,会给tgt设置一个过期的期限。当tgt过期之后,则cas会轮训这个tgt所访问的cas client端应用,并向每个cas
2014-08-12 21:38:25
7947
4
原创 cas入门之二十二:自动单点登出之后的问题
cas登录之后,产生tgt,当tgt过期之后,cas会自动消毁服务器端的tgt存根。如果开启自动登出(cas默认是开启的),则cas会向应用端发送自动登出请求,应用接到这个请求,会消毁相应的session,这样就完成了自动登出。之后用户,再次访问应用,就会出现页面假死,此时用户会刷新页面,则会出现登录页面。用户输入用户名/密码直接登录就可以了。但是实际应用时出现了很大的问题,那就是
2014-08-12 21:33:18
18020
4
原创 cas 入门之二十一:用户错误登录次数限制
用户错误登录限制简而言之就是限制单个用户单位时间内登录系统的错误次数。当用户在单位时间内登录系统的次数达到上限,就对这个用户采取相应的措施。对于单节点CAS情况下,用户登录限制有两个方法:一是按IP地址限制,另一个通过IP地址+用户名组合限制。 对于多节点CAS情况下,只能结合Inspektr的审计功能来限制用户登录。首先配置了限制用户登录的拦截器。当一个用户在单位
2014-07-23 18:18:30
18404
1
原创 cas入门之二十:cas审计日志Inspektr(下)
Inspektr在cas中配置如下(在cas/WEB-INF/spring-configuration/auditTrailContext.xml这个文件中,参看cas入门之二spring配置文件): xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org
2014-07-15 22:25:23
13285
原创 cas入门之十九:https形式发布cas证书制作
cas 默认是以https 协议发布的,我一直对这个问题避而不谈,因为这个涉及到ssl协议,不是那么容易搞的。我在公司应用cas也是以http协议发布的,因为这个集成公司内网应用,没有必要弄一个证书,花钱出力不讨好。但是即然提到这个https,那么从学习的角度来看,我们也应当学习一下。下面以oracle jdk 1.7为例应用keytool自己制作一个https证书(下面以单认证的方式
2014-07-13 00:59:11
12605
原创 cas入门之十八:cas审计日志Inspektr(上)
cas 的审记日志记录用到了Inspektr.Inspektr是什么呢?带着这个问题,查找了它的官网https://code.google.com/p/inspektr/现在源代码移到了https://github.com/dima767/inspektr,代码结构并且进行了重构。简而言之Inspektr就是一个很小的无侵入的代码审记jar包。它对于spring所托管的bean可以从如
2014-07-12 20:34:56
11085
1
原创 cas 入门之十七:ticket 存储方案-memcached ticket 存储
class="org.jasig.cas.ticket.registry.MemCacheTicketRegistry">
2014-07-06 19:32:48
10408
1
原创 cas 入门之十六:ticket 存储方案之ehcache ticket存储
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">class="org.jasig.cas.ticket.registry.EhCacheTicketRegistry"p:serviceTicketsCache-ref="serviceTicketsCache"p:ticketGr
2014-07-05 15:12:50
7561
原创 cas 入门之十五:ticket 存储方案-jpa ticket存储
jpa ticket存储,也就是可以让cas将ticket存储在后端的数据库,比如oracle,mysql等。这个功能可以让我们来构建高可用的cas 服务器集群。下面我会描述具体的配置,让cas如何将ticket存入后端oracle数据库,我在实际生产应用中也是存入oracle数据库的,因为公司只有oracle数据库。其实存在哪个数据库都一样,相互转换很容易,只需要更改一下数据源及数据库驱
2014-07-04 20:59:14
13393
8
原创 cas 入门之十四:ticket 存储方案之ConcurrentHashMap ticket存储
cas 默认ticket存储放在ConcurrentHashMap,因为这种存储方式对于单个cas server服务器,那是再合适不过了,当然对于它的性能调整,也就是对于ConcurrentHashMap的性能调整,默认情况下配置是:moreTicketRegistry涉及到三个参数:initialCapacity - 初始容量。该实现执行内部大小调整,以容纳这些元素。lo
2014-07-03 21:23:02
3666
原创 cas 入门之十三:ticket 存储方案之简介
cas认证过程中涉及两类ticket,一类是TGT,一类是ST,在默认的情况下,这些ticket是存储在服务端的内存的。为了更好的提高服务器的性能,以及cas服务器集群化,cas系统又提供了几种ticket的存储方案。cas一共提供了如下几种存储方案:ConcurrentHashMap ticket存储,这个也是默认存储方案;jpa ticket存储;ehcache ticke
2014-07-02 20:52:55
4578
原创 cas 入门之十二:cas 认证处理器-LDAP
关于cas的ldap认证,可以参看http://blog.163.com/magicc_love/blog/static/18585366220132294648822/这篇文章对于如何配置ldap已介绍的算是比较全面了.后面我主要描述一下这两个的认证逻辑.org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler 认
2014-06-30 20:52:07
5881
原创 cas 入门之十一:cas 认证处理器-JDBC示例(下)
jdbc认证配置示例打开cas/WEB-INF/deployerConfigContext.xml,在底部应当能够找到这个是cas 提供的默认认证处理器,只要用户名等于密码就可以通过认证。可以用一个或多个jdbc认证方式去替换这个认证方式. class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAut
2014-06-29 08:01:45
3388
原创 cas 入门之十:cas 认证处理器-JDBC简述(上)
jdbc认证处理器需要增加cas-server-support-jdbc-3.5.2.jar对于jdbc认证处理器,包含三个3.1.org.jasig.cas.adaptors.jdbc.BindModeSearchDatabaseAuthenticationHandler根据提供的用户名及密码,认证是否能够连上相应的数据库,如何可以则认证成功,反之则认证失败,它需要一个参数dat
2014-06-28 21:00:56
3625
spring security详解
2010-08-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅