背景

某客户内部销售系统支持和ADFS(Active Directory Federation Services)单点登录集成,但客户内部系统都是通过Oracle OAM进行单点登录,因此需要实现ADFS和OAM的单点登录集成。

预备知识

SAML 2.0

SAML是一种实现单点登录的协议,最新的版本是2.0,SAML协议细节部分十分复杂,但过程很简单,我们没必要去深究协议细节,只要清楚过程是怎么就行,在SAML里,作为认证服务器被称做IDP(Identity Provider),提供用户服务的叫做SP(Service Providers),单点登录过程如下:

Read the rest of this entry

, ,

概述

OIM对于用户数据有较为完善的方案,可以做到根据策略自动推送,字段更新自动推送等,详细方案可以参考之前的文章,相比用户数据,组织数据确没有这么便利,很多需求需要自开发,本文系统性介绍关于组织,在OIM中如何做到生产级别的可用性。

连接器

连接器方案上首选Webservice的连接器,因为接口可以自开发,扩展性强,可以根据业务定制接口,但遗憾的是Webservice Connector并不支持组织,而且没有官方的12c版本,导致不能使用12c的新特性。但幸运的是,可以通过更改资源类型让Webservice Connector支持组织数据,具体步骤可以参考之前的这篇文章,这里就不再赘述。

当然,你也可以选择自开发连接器,这个不在本文的讨论范围内,可以参考官方文档

定时任务

在用户数据同步中,可以通过策略+角色实现自动推送,组织数据跟用户数据不同的是,组织数据是树结构,子节点的行为一般要和父节点保持一致,因此组织数据做不到自动推送的效果,我们需要开发一个定时器定时去做推送。OIM有提供定时调度功能,也支持自定义定时器。

Read the rest of this entry

背景

某项目服务器响应慢,cpu严重超负荷运行,并且有大量的netstat进程,如图:

进程由oracle用户启动,说明是通过oracle用户并非root用户启动。

排查

这种情况,第一直觉就是中毒了,大概率是挖矿程序,Linux中毒第一步就是排查是否有cron记录,大部分病毒都是通过cron进行自启动,cron还能保证进程关闭后能够再次启动,达到死而复生的目的。crontab -l命令显示果然有病毒的定时任务程序脚本

Read the rest of this entry

方案概述

Webservice Connector在OIM中只能同步用户资源,这一点在用build创建connector的时候就已经确定了,在connector的资源文件template/ConnectorConfig.xml中就定义了资源类型

<Resource repo-type="RDBMS" name="@{WS_LONG_CODE} User">
    <OBJ_TYPE>Application</OBJ_TYPE>
    <OBJ_ALLOWALL>1</OBJ_ALLOWALL>
    <OBJ_ALLOW_MULTIPLE>1</OBJ_ALLOW_MULTIPLE>
	<OBJ_ORDER_FOR>U</OBJ_ORDER_FOR>
....
</Resource>
<OBJ_ORDER_FOR>U</OBJ_ORDER_FOR>就表示该connector只能用于用户类型,所以在组织界面,无法选择webservice的connector,同样,webservice connector也未提供组织同步相关字段。

如果自己再开发一个connector一方面是学习成本,一方面是维护成本,既然只有类型不一样,那是否能够通过更改类型让webservice connector也支持组织同步?幸运的是答案是可以的。

Read the rest of this entry

背景

某项目测试环境jenkins突然执行不了脚本,错误如下:

$ /bin/sh -xe /tmp/jenkins3171686575384136508.sh
FATAL: command execution failed
java.io.IOException: error=13, Permission denied
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
Caused: java.io.IOException: Cannot run program "/bin/sh" (in directory "/data/jenkins/workspace/yc-notice-service"): error=13, Permission denied
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.Proc$LocalProc.<init>(Proc.java:249)
	at hudson.Proc$LocalProc.<init>(Proc.java:218)
	at hudson.Launcher$LocalLauncher.launch(Launcher.java:935)
	at hudson.Launcher$ProcStarter.start(Launcher.java:454)
	at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:109)
	at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:66)
	at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)
	at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.build(MavenModuleSetBuild.java:945)
	at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:683)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504)
	at hudson.model.Run.execute(Run.java:1819)
	at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543)
	at hudson.model.ResourceController.execute(ResourceController.java:97)
	at hudson.model.Executor.run(Executor.java:429)
Build step 'Execute shell' marked build as failure
Finished: FAILURE

测试环境在更改jenkins工作目录后问题解决,这个改动量其实蛮大的,需要迁移原工作目录数据,还要更改工作目录配置。然后生产环境也出现同样的问题,这边记录下解决的过程。

Read the rest of this entry

背景

某项目weblogic AdminServer在启动后会慢慢消耗内存,并且超过-Xmx设置的大小,最终消耗完整个服务器的内存。

  • 内存使用情况
[root@esb-osb1 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:          31996       30878         229         195         888         358
Swap:          8063        5793        2270