本文目录一览:
java系统和php系统整合,如何实现单点登陆
1、直接网上找一个单点登录系统,把这2个系统整合到一起,
2、自己写一个单点登录系统,借助中间表,比如你以java系统为主,在java系统里面嵌入了php系统,当点击php系统的栏目时就先去中间表check一下,然后直接跳到你的php系统上面就好,
3、如果没有权限啥的,你就直接放一个连接传用户名和密码直接登录访问也行。
php开发的对数据库的操作,用Java怎么实现
比较PHP和JSP这两个Web开发技术,在目前的情况是其实是比较PHP和Java的Web开发。以下是我就几个主要方面进行的比较:
一、 语言比较
PHP是解释执行的服务器脚本语言,首先php有简单容易上手的特点。语法和c语言比较象,所以学过c语言的程序员可以很快的熟悉php的开发。而java需要先学好java的语法和熟悉一些核心的类库,懂得面向对象的程序设计方法。所以java不如php好学。
Java首先要编译成字节码.class文件,然后在java虚拟机上解释执行。Java的Web开发首先最容易想到的就是JSP(现在已经到JSP2.0),原来的java的Web开发都是用servlet来实现的,用servlet来开发需要程序员在java的源文件中嵌入大量的html代码。所以后来就出现了JSP,JSP可以方便的嵌入到html文件当中,其实jsp文件在服务器上执行的时候首先会被应用服务器转换成servlet,然后再编译执行。Jsp可以通过servlet和JavaBean的支持产生强大的功能。JavaBean 是一种可复用的、跨平台的软件组件。使用javabean可以方便的实现java代码和html的分离,能够增强系统的功能和软件的复用性。
Java的Web开发属于SUN公司定义的J2EE其中的规范。而且在J2EE中包括了java的Web开发的所有方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特别适合于做大型的企业级的应用。
二、 数据库访问比较
Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。
PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。例如:用Java开发的Web应用从MySQL数据库转到Oracle数据库只需要做很少的修改。而PHP则需要做大量的修改工作。
三、 系统设计架构比较
采用Java的Web开发技术,需要使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。所以用Java进行开发前期需要做大量的系统分析和设计的工作。
四、 跨平台性
Java和PHP都有很好的跨平台的特性。几乎都可以在不作任何修改的情况下运行在Linux或者Windows等不同的操作系统上。
五、 开发成本比较
PHP最经典的组合就是:PHP + MySQL + Apache。非常适合开发中小型的Web应用,开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。
Java的Web应用服务器有免费Tomcat、JBoss等,如果需要更好的商业化的服务有:Web Sphere和 Web logic。
六、 分布式多层架构比较
PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就比较强大,可以实现多层的网络架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用java的Web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。
下面简要的说一下Struts,它实质上是在JSP Model2的基础上实现的一个MVC(Model、View、Controler)框架。JSP Model2体系结构是一种联合使用JSP 与Servlet 来提供动态内容的方法。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由Servlet实现的,视图由一组JSP文件组成。采用Struts可以明确角色的定义和开发者与网页设计者的分工。而且项目越复杂,其优势越明显。
七、 源代码安全
PHP开发的程序的源代码都是公开的,他人拿到php开发的程序后都可以进行修改。
Java开发的程序,最后用户拿到的是只是一些编译好的class类,无法看到完整的源代码,安全性高。
八、性能比较
有人做过试验,对这两种种语言分别做回圈性能测试及存取Oracle数据库测试。
在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的回圈。而PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒。
数据库测试中,二者分别对 Oracle 8 进行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒。
综上所述,我个人认为,PHP适合于快速开发,中小型应用系统,开发成本低,能够对变动的需求作出快速的反应。而Java适合于开发大型的应用系统,应用的前景比较广阔,系统易维护、可复用性较好。还有,同样功能的系统用Java开发的系统要比PHP开发的系统的价格要高。
java怎么实现php 的crypt
/****************************************************************************
* JCrypt.java
*
* Java-based implementation of the unix crypt command
*
* Based upon C source code written by Eric Young, eay@psych.uq.oz.au
*
****************************************************************************/
public class JCrypt
{
private JCrypt() {}
private static final int ITERATIONS = 16;
private static final int con_salt[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
0x0A, 0x0B, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,
0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,
0x23, 0x24, 0x25, 0x20, 0x21, 0x22, 0x23, 0x24,
0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,
0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,
0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C,
0x3D, 0x3E, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,
};
private static final int cov_2char[] =
{
0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44,
0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C,
0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,
0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62,
0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A,
0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72,
0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A
};
private static final int byteToUnsigned(byte b)
{
int value = (int)b;
return(value = 0 ? value : value + 256);
}
private static int fourBytesToInt(byte b[], int offset)
{
int value;
value = byteToUnsigned(b[offset++]);
value |= (byteToUnsigned(b[offset++]) 8);
value |= (byteToUnsigned(b[offset++]) 16);
value |= (byteToUnsigned(b[offset++]) 24);
return(value);
}
private static final void intToFourBytes(int iValue, byte b[], int offset)
{
b[offset++] = (byte)((iValue) 0xff);
b[offset++] = (byte)((iValue 8 ) 0xff);
b[offset++] = (byte)((iValue 16) 0xff);
b[offset++] = (byte)((iValue 24) 0xff);
}
private static final void PERM_OP(int a, int b, int n, int m, int results[])
{
int t;
t = ((a n) ^ b) m;
a ^= t n;
b ^= t;
results[0] = a;
results[1] = b;
}
private static final int HPERM_OP(int a, int n, int m)
{
int t;
t = ((a (16 - n)) ^ a) m;
a = a ^ t ^ (t (16 - n));
return(a);
}
private static int [] des_set_key(byte key[])
{
int schedule[] = new int[ITERATIONS * 2];
int c = fourBytesToInt(key, 0);
int d = fourBytesToInt(key, 4);
int results[] = new int[2];
PERM_OP(d, c, 4, 0x0f0f0f0f, results);
d = results[0]; c = results[1];
c = HPERM_OP(c, -2, 0xcccc0000);
d = HPERM_OP(d, -2, 0xcccc0000);
PERM_OP(d, c, 1, 0x55555555, results);
d = results[0]; c = results[1];
PERM_OP(c, d, 8, 0x00ff00ff, results);
c = results[0]; d = results[1];
PERM_OP(d, c, 1, 0x55555555, results);
d = results[0]; c = results[1];
d = (((d 0x000000ff) 16) | (d 0x0000ff00) |
((d 0x00ff0000) 16) | ((c 0xf0000000) 4));
c = 0x0fffffff;
int s, t;
int j = 0;
for(int i = 0; i ITERATIONS; i ++)
{
if(shifts2[i])
{
c = (c 2) | (c 26);
d = (d 2) | (d 26);
}
else
{
c = (c 1) | (c 27);
d = (d 1) | (d 27);
}
c = 0x0fffffff;
d = 0x0fffffff;
s = skb[0][ (c ) 0x3f ]|
skb[1][((c 6) 0x03) | ((c 7) 0x3c)]|
skb[2][((c 13) 0x0f) | ((c 14) 0x30)]|
skb[3][((c 20) 0x01) | ((c 21) 0x06) |
((c 22) 0x38)];
t = skb[4][ (d ) 0x3f ]|
skb[5][((d 7) 0x03) | ((d 8) 0x3c)]|
skb[6][ (d 15) 0x3f ]|
skb[7][((d 21) 0x0f) | ((d 22) 0x30)];
schedule[j++] = ((t 16) | (s 0x0000ffff)) 0xffffffff;
s = ((s 16) | (t 0xffff0000));
s = (s 4) | (s 28);
schedule[j++] = s 0xffffffff;
}
return(schedule);
}
private static final int D_ENCRYPT
(
int L, int R, int S, int E0, int E1, int s[]
)
{
int t, u, v;
v = R ^ (R 16);
u = v E0;
v = v E1;
u = (u ^ (u 16)) ^ R ^ s[S];
t = (v ^ (v 16)) ^ R ^ s[S + 1];
t = (t 4) | (t 28);
L ^= SPtrans[1][(t ) 0x3f] |
SPtrans[3][(t 8) 0x3f] |
SPtrans[5][(t 16) 0x3f] |
SPtrans[7][(t 24) 0x3f] |
SPtrans[0][(u ) 0x3f] |
SPtrans[2][(u 8) 0x3f] |
SPtrans[4][(u 16) 0x3f] |
SPtrans[6][(u 24) 0x3f];
return(L);
}
private static final int [] body(int schedule[], int Eswap0, int Eswap1)
{
int left = 0;
int right = 0;
int t = 0;
for(int j = 0; j 25; j ++)
{
for(int i = 0; i ITERATIONS * 2; i += 4)
{
left = D_ENCRYPT(left, right, i, Eswap0, Eswap1, schedule);
right = D_ENCRYPT(right, left, i + 2, Eswap0, Eswap1, schedule);
}
t = left;
left = right;
right = t;
}
t = right;
right = (left 1) | (left 31);
left = (t 1) | (t 31);
left = 0xffffffff;
right = 0xffffffff;
int results[] = new int[2];
PERM_OP(right, left, 1, 0x55555555, results);
right = results[0]; left = results[1];
PERM_OP(left, right, 8, 0x00ff00ff, results);
left = results[0]; right = results[1];
PERM_OP(right, left, 2, 0x33333333, results);
right = results[0]; left = results[1];
PERM_OP(left, right, 16, 0x0000ffff, results);
left = results[0]; right = results[1];
PERM_OP(right, left, 4, 0x0f0f0f0f, results);
right = results[0]; left = results[1];
int out[] = new int[2];
out[0] = left; out[1] = right;
return(out);
}
public static final String crypt(String salt, String original)
{
while(salt.length() 2)
salt += "A";
StringBuffer buffer = new StringBuffer(" ");
char charZero = salt.charAt(0);
char charOne = salt.charAt(1);
buffer.setCharAt(0, charZero);
buffer.setCharAt(1, charOne);
int Eswap0 = con_salt[(int)charZero];
int Eswap1 = con_salt[(int)charOne] 4;
byte key[] = new byte[8];
for(int i = 0; i key.length; i ++)
key[i] = (byte)0;
for(int i = 0; i key.length i original.length(); i ++)
{
int iChar = (int)original.charAt(i);
key[i] = (byte)(iChar 1);
}
int schedule[] = des_set_key(key);
int out[] = body(schedule, Eswap0, Eswap1);
byte b[] = new byte[9];
intToFourBytes(out[0], b, 0);
intToFourBytes(out[1], b, 4);
b[8] = 0;
for(int i = 2, y = 0, u = 0x80; i 13; i ++)
{
for(int j = 0, c = 0; j 6; j ++)
{
c = 1;
if(((int)b[y] u) != 0)
c |= 1;
u = 1;
if(u == 0)
{
y++;
u = 0x80;
}
buffer.setCharAt(i, (char)cov_2char[c]);
}
}
return(buffer.toString());
}
public static void main(String args[])
{
if(args.length = 2)
{
System.out.println
(
"[" + args[0] + "] [" + args[1] + "] = [" +
JCrypt.crypt(args[0], args[1]) + "]"
);
}
}
}
java怎么调用php的语句是什么
PHP调用JAVA方式
1. 背景
在开发招商银行信用卡分期付款功能过程中,在支付成功之后需要对银行的返回数据进行签名验证,因签名加密方式招商银行是不提供的,只提供了相应的JAVA验证类测试例子,而本项目采用的是PHP架构方式,因此需要PHP调用JAVA的验证类来测试签名是否正确。
2. 目的
本文档提供一种PHP调用JAVA类的方式来进行招行的支付成功签名验证,本方法也可用于其他银行的JAVA签名验证方式。
3. 名词解释
名词
解释说明
php-java-bridge
PHP和JAVA的连接桥
4. php-java-bridge安装和配置介绍
4.1 安装
Php-java-bridge下载路径:
最新php-java-bridge版本是php-java-bridge_6.2.1.tar.gz解压之后采用/usr/local/php/phpize进行模块编译,提示Cannot find config.m4,版本过高问题,采用了5.4.4.2版本。
编译及安装:
tar zxvf php-java-bridge_5.4.4.2.tar.gz
cd php-java-bridge-5.4.4.2/
/usr/local/php/bin/phpize
./configure --disable-servlet --with-java=/usr/local/java/,/usr/local/java/jre --with-php-config=/usr/local/php/bin/php-configmake make install
4.2 配置
vim /usr/local/php/etc/php.ini
[新增]
extension=java.so
[java]
java.java_home="/usr/local/java/"
java.java="/usr/local/java/jre/bin/java"
java.log_file="/var/log/php-java-bridge.log"java.classpath="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/JavaBridge.jar"java.libpath="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"java.log_level="3"
java.hosts="10.204.79.232:8081"
4.3 启动
重新启动nginx或者apache,输入?php phpinfo();?可以看到java support
Enabled
java bridge
5.4.4.2
java.log_level
2
手动启动javaBridge
java -jar JavaBridge.jar SERVLET:8080
也可以尝试使用java -jar JavaBridge.jar SERVLET_LOCAL:80814.4 测试
解压javaBridge.jar,取出java目录下相关的Java.inc文件测试代码:
require_once("java/Java.inc");
$string = new Java("java.lang.String", "HelloWorld");echo $string;
$system=new Java("java.lang.System");
echo "Java version=".$system-getProperty("java.version")." ";注意:java/Java.inc记得从javaBridge.jar解压出来放在相关php代码中注意取值:java_is_true java_is_false java_values5. 注意事项及配置过程中的问题
下述描述在实际配置测试过程中可能会碰到的问题及解决方法:
5.1 问题
问题1:
configure: error: host_alias is not set. Make sure to run config.guessBack-end configuration failed.
Please install the recommended autoconf, libtool and automake versionsor disable back-end configuration and use the pre-compiled J2EE back-end:
./configure --disable-backend --with-java=JAVA_HOME
configure: error: ./configure.gnu failed for server安装yum install libtool即可
5.2 注意事项
事项1:
远程调用require_once(‘‘);需要设置php.ini的allow_url_include参数为on,同时编辑 JavaBridge 部署的 Web 应用程序目录中的 web.xml 文件,如下:
取消对这个部分的注释,以便允许对您的 Java 类进行远程访问init-param
param-namepromiscuous/param-name
param-valueOn/param-value
/init-param
事项2:
在实际生产环境中,考虑到如果每台机器都部署一个JavaBridge服务的话,不好维护。故考虑在单台或2台左右机器上部署,其他机器连接到部署机器上,可以做分流承压的功效并且易监控。在外网环境下发现在调用部署环境的内外网IP都无法获取到指定文档。实际require_once本质就是调用部署环境的java.inc文件,可以考虑把相关文件放在本地生产环境上,但在引用Java_require相关JAR包会提示连接不到JavaBridge服务,阅读Java.inc可以查看它会通过几个地方设置JAVA_HOST宏变量,第一种是通过require_once里面的IP或者域名和端口,另外一种是在未设置JAVA_HOST宏变量的前提下读取php.ini,如果都没有java.hosts参数则默认为127.0.0.1:8080。
排除第一种方式如果采用读取php.ini的话,因为本身java.hosts参数不属于PHP可人为设置的参数,采用ini_set函数并不能指定java.hosts的值,所以一种方式是在所有项目的生产环境的php.ini都指定内网IP和端口,如java.hosts=10.204.79.231:8080。还有一种方式,查阅Java.inc可以看到是在未设置JAVA_HOST变量的前提下是去读取php.ini,我们可以在require_once(‘java/Java.inc‘)之前新增一行define ("JAVA_HOSTS", $host)。
5.3 参考例子
个人的实际测试代码如下:
private function _checkSign($strText, $strSign){$ret = false;
try{
$host = ConfigWrapper::load()-services-phpjava-host;if($host != NULL){
define ("JAVA_HOSTS", $host);
}
require_once(‘java/Java.inc‘);
java_require(self::CMBJAR);
$pay = new Java(‘testCdpaySign‘, self::CERFILE);$result = $pay-checkSign((string)$strText, (string)$strSign);if(java_is_true($result) == 1){
$ret = true;
}
}catch (\Exception $e) {
Logger::debug("_checkSign = " . $e-getMessage());}
return $ret;
}