当前位置:  编程技术>综合
本页文章导读:
    ▪Android开发WordPress的客户端, 登录时Cookie(httpOnly)的问题       曾经用Android开发过学校教务系统的登录功能(jsp/tomcat),能够成功模拟出Http请求. 但是WordPress的登录功能实现起来要绕一个弯子. 不能直接用HttpClient来得到cookie. 这位兄弟遇到的问题跟我是一.........
    ▪Hibernate---二级缓存实例      首先需要在hibernate.xml中声明使用缓存: <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop><!-- 缓存插件 --> <prop key="hibernate.cache.use_query_cache">true.........
    ▪oracle表空间与数据文件日常管理        一.表空间的创建 1.创建普通表空间指定初始大小,自动扩展,最大大小: (oracle允许的单个smallfile数据文件最大大小为 4194302*blocksize,单个bigfile数据文件最大可达到(32-128)TB) (默认创建表.........

[1]Android开发WordPress的客户端, 登录时Cookie(httpOnly)的问题
    来源:    发布时间: 2013-11-10

曾经用Android开发过学校教务系统的登录功能(jsp/tomcat),能够成功模拟出Http请求. 但是WordPress的登录功能实现起来要绕一个弯子. 不能直接用HttpClient来得到cookie.

这位兄弟遇到的问题跟我是一样的 http://hi.baidu.com/xtitman/item/eeaef4c7d4a0e2bc0c0a7b69最后也是成功用socket方法把功能实现了. 其中为如何用socket模拟http的post/get请求消息头以及消息体纠结了几个小时。

My codes are as follows. Please ignore the animation part and focus on the method run() in class MyThread. It's just a demo and I didn't make any post-procession with the result. And if you have any question about this demo, please send an e-mail to davyjones2010@gmail.com which I would appreciate much.

 

 

package login.activities;

import home.activities.R;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.URLEncoder;
import java.net.UnknownHostException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import system.standards.Standards;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class LoginActivity extends Standards
{
	private Button leftBall = null;
	private Button rightBall = null;
	private Button submit = null;

	private EditText username = null;
	private String usernameText = null;
	private EditText password = null;
	private String passwordText = null;

	private DisplayMetrics metrics = null;

	private static final String serverIpAddress = "***.***.***.***";
	private static final String encodedUsername = "wordpress_af8ad83c4c8ce7c7f7efddce117a5a74=admin%";
	private static final String encodedPassword = "wordpress_logged_in_af8ad83c4c8ce7c7f7efddce117a5a74=admin%";
	// private static final String LOGIN_URL =
	// "http://atom.student.utwente.nl/wp-login.php";
	private static String encodedUsernameText = "";
	private static String encodedPasswordText = "";

	private boolean isAnimated = false;

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);

		setContentView(R.layout.login);

		getAllWidgets();

		submit.setOnClickListener(new Button.OnClickListener()
		{

			public void onClick(View arg0)
			{
				// TODO Auto-generated method stub
				usernameText = username.getText().toString();
				passwordText = password.getText().toString();
				Log.d("DEBUG", "USERNAME: " + usernameText);
				Log.d("DEBUG", "PASSWORD: " + passwordText);

				doLogin(usernameText, passwordText);
			}

		});
	}

	private void doLogin(String usernameText, String passwordText)
	{
		MyLoginThread myLoginThread = new MyLoginThread(usernameText,
				passwordText);

		myLoginThread.start();
	}

	private class MyLoginThread extends Thread
	{
		private String logUsername = null;
		private String logPassword = null;

		public MyLoginThread(String logUsername, String logPassword)
		{
			this.logUsername = logUsername;
			this.logPassword = logPassword;
		}

		@Override
		public void run()
		{
			// TODO Auto-generated method stub
			// 首先采用socket方式模拟浏览器发出第一个Post请求访问第一个网页(携带的参数是username和 password, 消息头以及消息体必须遵守post/get的严格格式)
			// 之后得到第一个网页的HttpResponse, 从中提取出由服务器加密之后的username和password
			// 第一个网页由于返回状态码302因而需要进行重定向到真正的DashBoard即登录成功页面
			// 重定向是需要重新发送一个请求, 通过FireBug可以得知需要得到的是GET请求
			// 并且携带的cookie是包含上次请求返回的加密之后username和password
			// 所以这次模拟的重定向可以直接使用HttpGet, 然后调用httpGet.addHeader("Cookie", 加密之后的用户名 + 加密之后的密码 + 其他信息(是静态的信息, 可以由FireBug探测得知));
			// 從而得到真正的DashBoard页面
			// 为什么第一次请求需要用底层的socket呢?而不直接使用HttpPost/HttpClient呢?可以通过使用相应方法(getHeaders()?getCookie()?)得到cookies, 而不需要自己来拼串
			// 原因是发现第一次的请求返回的cookies, 是 httpOnly的, 采用HttpClient方式遍历headers可以发现是打印不出来的!也就是说不能用上层的这些方法了
			// 所以之后采用socket方法模拟POST请求了, 得到的是未经过加工处理的response, 采用String的相应方法拼串可以提取出cookies
			
			try
			{
				Socket socket = new Socket(serverIpAddress, 80);

				BufferedReader br = new BufferedReader(new InputStreamReader(
						socket.getInputStream(), "UTF-8"));
				OutputStream os = socket.getOutputStream();

				StringBuffer sb = new StringBuffer(
						"POST /wp-login.php HTTP/1.1\r\n");
				sb.append("Host: atom.student.utwente.nl\r\n");
				sb.append("Connection: keep-alive\r\n");
				sb.append("Content-Length: 114\r\n");
				sb.append("Cache-Control: max-age=0\r\n");
				sb.append("Origin: http://atom.student.utwente.nl\r\n");
				sb.append("User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1\r\n");
				sb.append("Content-Type: application/x-www-form-urlencoded\r\n");
				sb.append("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n");
				sb.append("Referer: http://atom.student.utwente.nl/wp-login.php\r\n");
				sb.append("Accept-Encoding: gzip,deflate,sdch");
				sb.append("Accept-Language: en,en-US;q=0.8,zh;q=0.6,zh-CN;q=0.4,nl;q=0.2\r\n");
				sb.append("Accept-Charset: UTF-8,*;q=0.5\r\n");
				sb.append("Cookie: wordpress_polylang=en; wp-settings-1=imgsize%3Dfull%26editor%3Dhtml%26hidetb%3D1%26libraryContent%3Dbrowse; wp-settings-time-1=1357880535; wordpress_test_cookie=WP+Cookie+check\r\n");

				sb.append("\r\n");

				sb.append(URLEncoder.encode("log", "UTF-8"));
				sb.append("=");
				sb.append(URLEncoder.encode(logUsername, "UTF-8"));
				sb.append("&");
				sb.append(URLEncoder.encode("pwd", "UTF-8"));
				sb.append("=");
				sb.append(URLEncoder.encode(logPassword, "UTF-8"));
				sb.append("&");
				sb.append(URLEncoder.encode("wp-submit", "UTF-8"));
				sb.append("=");
				sb.append(URLEncoder.encode("Log In", "UTF-8"));
				sb.append("&");
				sb.append(URLEncoder.encode("redirect_to", "UTF-8"));
				sb.append("=");
				sb.append(URLEncoder.encode(
						"http://atom.student.utwente.nl/wp-admin/", "UTF-8"));
				sb.append("&");
				sb.append(URLEncoder.encode("testcookie", "UTF-8"));
				sb.append("=");
				sb.append(URLEncoder.encode("1", "UTF-8"));

				os.write(sb.toString().getBytes());

				String tmp = "";
				StringBuffer resultBuffer = new StringBuffer();

				while ((tmp = br.readLine()) != null)
				{
					System.out.println(tmp);
					resultBuffer.append(tmp);
				}

				int usernameStartPosition = resultBuffer
						.indexOf(encodedUsername) + encodedUsername.length();
				int passwordStartPosition = resultBuffer
						.indexOf(encodedPassword) + encodedPassword.length();

				encodedUsernameText = resultBuffer.substring(
						usernameStartPosition, usernameStartPosition + 47);
				encodedPasswordText = resultBuffer.substring(
						passwordStartPosition, passwordStartPosition + 47);

				System.out.println("encodedUsernameText: "
						+ encodedUsernameText);
				System.out.println("encodedPasswordText: "
						+ encodedPasswordText);
				os.close();
				br.close();

				DefaultHttpClient httpClient = new DefaultHttpClient();
				HttpGet httpGet = new HttpGet(
						"http://atom.student.utwente.nl/wp-admin/");

				httpGet.addHeader(
						"Cookie",
						encodedUsername
								+ encodedUsernameText
								+ "; wordpress_polylang=en; wp-settings-1=imgsize%3Dfull%26editor%3Dhtml%26hidetb%3D1%26libraryContent%3Dbrowse; wp-settings-time-1=1357880535; wordpress_test_cookie=WP+Cookie+check; "
								+ encodedPassword + encodedPasswordText);

				HttpResponse httpResponse = null;
				httpResponse = httpClient.execute(httpGet);

				HttpEntity httpEntity = null;

				String resultText = null;

				if (httpResponse.getStatusLine().getStatusCode() == 200)
				{
					System.out.println("LOGIN SUCCEED!");
					
					Toast.makeText(LoginActivity.this,
							"LOGIN SUCCEED!", Toast.LENGTH_SHORT)
							.show();
					
					httpEntity = httpResponse.getEntity();

					resultText = EntityUtils.toString(httpEntity, "UTF-8");

					System.out.println(resultText);
				} else
				{
					Toast.makeText(LoginActivity.this,
							"Invalid Username or Password!", Toast.LENGTH_SHORT)
							.show();
				}
			} catch (UnknownHostException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			super.run();
		}
	}

	private class MyAnimationMoveListener implements AnimationListener
	{

		@Override
		public void onAnimationEnd(Animation animation)
		{
			// TODO Auto-generated method stub
			// clear all animations
			leftBall.clearAnimation();
			rightBall.clearA      
    
[2]Hibernate---二级缓存实例
    来源: 互联网  发布时间: 2013-11-10
首先需要在hibernate.xml中声明使用缓存:
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop><!-- 缓存插件 -->
<prop key="hibernate.cache.use_query_cache">true</prop><!-- 是否开启查询缓存 -->

然后在src目录下添加ehcache.xml文件,文件内容:
<ehcache>
    <diskStore path="C:\\cache"/>
    <defaultCache
        maxElementsInMemory="10000"
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="120"
        overflowToDisk="true"
        />
    <cache name="NEVER_OVERDUE"
        maxElementsInMemory="1000"
        eternal="true"
        timeToIdleSeconds="0"
        timeToLiveSeconds="0"
        overflowToDisk="false"
        />
</ehcache>
最后在需要缓存的映射文件中配置:
<cache usage="read-write"/> 一般配置在class标签里面的第一个

 

 

资源下载:http://www.seo-999.com 、http://fl.seo-999.com

 

作者:weibinbinlove 发表于2013-1-11 20:21:17 原文链接
阅读:0 评论:0 查看评论

    
[3]oracle表空间与数据文件日常管理
    来源: 互联网  发布时间: 2013-11-10

 

一.表空间的创建
1.创建普通表空间指定初始大小,自动扩展,最大大小:
(oracle允许的单个smallfile数据文件最大大小为 4194302*blocksize,单个bigfile数据文件最大可达到(32-128)TB)
(默认创建表空间为标准的8k数据块,smallfile表空间)
create tablespace t1 datafile '/u01/oracle/product/oradata/orcl/t1.dbf' size 10m autoextend on next 5m maxsize 100m;
2.创建非标准块大小的表空间:
 alter system set db_16k_cache_size=100m scope=spfile;
 shutdown immediate;
 startup;
create tablespace t2 datafile '/u01/oracle/product/oradata/orcl/t2.dbf' size 10m blocksize 16k;
3.创建大文件表空间(大文件表空间只允许有一个数据文件):
create bigfile tablespace t3 datafile '/u01/oracle/product/oradata/orcl/t3.dbf' size 10m ;
二.修改表空间(如果修改临时表空间,注意将语句中的datafile改为tempfile):
1.在表空间中添加数据文件:
alter tablespace t1 add datafile '/u01/oracle/product/oradata/orcl/t11.dbf' size 1m;
2.在表空间中删除数据文件:
 alter tablespace t1 drop datafile '/u01/oracle/product/oradata/orcl/t11.dbf';
3.修改指定数据文件的大小
alter database datafile  '/u01/oracle/product/oradata/orcl/t1.dbf' resize 1m;
三。表空间与数据文件的offline与online
1.表空间的脱机与联机
alter tablespace t1 offline;
alter tablespace t1 online;
2.数据文件的脱机与联机(数据文件的脱机与联机需要使用归档模式,数据文件脱机后一定要执行数据文件介质恢复,否则会报错)
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
alter database datafile '/u01/oracle/product/oradata/orcl/t1.dbf' offline;
recover datafile 5;
alter database datafile '/u01/oracle/product/oradata/orcl/t1.dbf' online;
四。表空间改名
alter tablespace t1 rename to t4;
五.表空间删除
1。正常删除表空间,不删除数据文件:
drop tablespace t4 ;
2.删除表空间同时删除所有相关数据文件;
drop tablespace t2 including contents and datafiles;
六。使用已经存在但未使用的数据文件创建表空间:
SQL> create tablespace t1 datafile '/u01/oracle/product/oradata/orcl/t1.dbf' size 10m;
create tablespace t1 datafile '/u01/oracle/product/oradata/orcl/t1.dbf' size 10m
*
ERROR at line 1:
ORA-01119: error in creating database file
'/u01/oracle/product/oradata/orcl/t1.dbf'
ORA-27038: created file already exists
Additional information: 1
SQL> create tablespace t1 datafile '/u01/oracle/product/oradata/orcl/t1.dbf' reuse;

Tablespace created.

 

 

资源下载:http://www.seo-999.com 、http://fl.seo-999.com

作者:weibinbinlove 发表于2013-1-11 20:19:11 原文链接
阅读:0 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3