http://wenwen.soso.com/z/q206471895.htm?sp=1100

http://wenwen.soso.com/z/q206471895.htm?sp=1100
在线等!Java 如何实现“记住密码”
已过期 50 [ 标签:java, 记住密码, 爪哇 ] 匿名 2010-07-18 12:51
Java的C/S模式中 ,登陆界面的“记住密码”一般用什么技术实现?求源码? 问题补充:


像qq这样的 用Java怎么实现?

密码如果存在本地客户端,怎么对文件加密?

密码如果存在服务器端数据库,登录时的具体操作流程是什么样的?

收藏 推荐答案
对于我想回答的 那个问问团队名为 Kitty 的已经说了



如果是你自己写的话 这功能 就是IO流里面的 序列化

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("D://abc.txt"))) ;

oos.writeObject(p) ; 写入制定文件内

ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("D://abc.txt"))) ;

Person p = (Person)ois.readObject() ;从指定文件中读出数据

至于锁 你可以用 NIO中的锁定文件 他不但可以锁定整个文件 也可以锁定 一部分

public abstract class FileLock
extends Object
表示文件区域锁定的标记。

每次通过 FileChannel 类的 lock 或 tryLock 方法获取文件上的锁定时,就会创建一个文件锁定对象。

文件锁定对象最初是有效的。通过调用 release 方法、关闭用于获取该锁定的通道,或者终止 Java 虚拟机(以先到者为准)来释放锁定之前,该对象一直是有效的。可通过调用锁定的 isValid 方法来测试锁定的有效性。

文件锁定要么是独占的,要么是共享的。共享锁定可阻止其他并发运行的程序获取重叠的独占锁定,但是允许该程序获取重叠的共享锁定。独占锁定则阻止其他程序获取任一类型的重叠锁定。一旦释放某个锁定后,它就不会再对其他程序所获取的锁定产生任何影响。

可通过调用某个锁定的 isShared 方法来确定它是独占的还是共享的。某些平台不支持共享锁定,在这种情况下,对共享锁定的请求被自动转换为对独占锁定的请求。

单个 Java 虚拟机在某个特定文件上所保持的锁定是不重叠的。要测试某个候选锁定范围是否与现有锁定重叠,可使用 overlaps 方法。

文件锁定对象记录了在其文件上保持锁定的文件通道、该锁定的类型和有效性,以及锁定区域的位置和大小。只有锁定的有效性是随时间而更改的;锁定状态的所有其他方面都是不可变的。

文件锁定以整个 Java 虚拟机来保持。但它们不适用于控制同一虚拟机内多个线程对文件的访问。

多个并发线程可安全地使用文件锁定对象。

public abstract class FileLock
extends Object
表示文件区域锁定的标记。

每次通过 FileChannel 类的 lock 或 tryLock 方法获取文件上的锁定时,就会创建一个文件锁定对象。

文件锁定对象最初是有效的。通过调用 release 方法、关闭用于获取该锁定的通道,或者终止 Java 虚拟机(以先到者为准)来释放锁定之前,该对象一直是有效的。可通过调用锁定的 isValid 方法来测试锁定的有效性。

文件锁定要么是独占的,要么是共享的。共享锁定可阻止其他并发运行的程序获取重叠的独占锁定,但是允许该程序获取重叠的共享锁定。独占锁定则阻止其他程序获取任一类型的重叠锁定。一旦释放某个锁定后,它就不会再对其他程序所获取的锁定产生任何影响。

可通过调用某个锁定的 isShared 方法来确定它是独占的还是共享的。某些平台不支持共享锁定,在这种情况下,对共享锁定的请求被自动转换为对独占锁定的请求。

单个 Java 虚拟机在某个特定文件上所保持的锁定是不重叠的。要测试某个候选锁定范围是否与现有锁定重叠,可使用 overlaps 方法。

文件锁定对象记录了在其文件上保持锁定的文件通道、该锁定的类型和有效性,以及锁定区域的位置和大小。只有锁定的有效性是随时间而更改的;锁定状态的所有其他方面都是不可变的。

文件锁定以整个 Java 虚拟机来保持。但它们不适用于控制同一虚拟机内多个线程对文件的访问。

多个并发线程可安全地使用文件锁定对象。



如果你有API 你查查 FileLock 这个类 会有你想要的



序列化 查 ObjectInputStream ObjectOutputStream 同样会有你想要的

羅幕の悲劇り 回答采纳率:23.2% 2010-07-31 22:30 您已经评价过!好:0 您已经评价过!不好:0 相关知识
JAVA中如何实现代码重用?9回答2009-07-18java扩展真的能够实现吗?1回答2009-08-27用JAVA怎样实现1+1=3的代码1回答2012-03-05更多java序列化 加密密码相关知识>>
java序列化java对象序列化用序列化保存密码java字符串加密解密java手机加密软件java 加密java短信加密java 加密解密


答案(15)
你这个问题有些模糊!没明白?



帅的不是哥 2010-07-18 12:53 您已经评价过!好:0 您已经评价过!不好:1 一般用cookie实现。
个人觉得也可以用单独的文件存储加密后的数据,不过这样比较麻烦。
具体实现就找下相关资料就行了,不算复杂。
像QQ这样的肯定是存储在本地的,而且类似功能的论坛之类的也是存在本地的cookie里面的。
继续追问:
是对内容加密还是对文件加密?怎么加密?
补充回答:
如果使用cookie那就对cookie进行加密,

如果是你准备存到自定义的文件里,那就对文件进行加密。

关于如何加密,网上一大堆的例子,随便搜下就有哈。

默念着、幸福 回答采纳率:44.5% 2010-07-18 14:13 您已经评价过!好:0 您已经评价过!不好:0 保存cookie,MD5加密,网上有MD5的类文件,傻瓜都会用
聆聽Savage 回答采纳率:25.0% 2010-07-19 11:51 您已经评价过!好:0 您已经评价过!不好:0 c/s模式貌似不能cookie吧,一般是直接存储在本地文件中的,像qq的记住密码以及聊天记录这些都是存储在本地文件中的,至于密码加密的话,可以采用MD5技术,MD5是不可逆向转换的,就是说现目前转换了之后不能被破解回来的,所以很安全。
淡定 回答采纳率:13.3% 2010-07-20 09:47 您已经评价过!好:0 您已经评价过!不好:0 用cookie实现,

首先你用request 得到password后然后用一下代码实现:
Cookie thepassword=new Cookie(”password“,String.valueOf(password));
response.addCookie(theUsername);

获取的时候用
Cookie myCookie[]=request.getCookies();
然后遍历myCookie[],找到名称为password的cookie,然后取其值。 补充回答: 楼主说的记住密码,和登录密码检测不是一回事,

记住密码的意思就是说下次登录不用输入密码就行了,代码就是我上面写的那种方式。

而密码检测是检测数据库。当用户注册的时候,注册的信息会被记录在数据库中。如果用户登录,用户名和密码会给DAO层的程序做处理,DAO层专门封装了与数据库德连接,如果检测数据库中有这个登录用户名和相匹配的密码,返回个ture值,那么用户就能够登录,如果检测不成功,返回个false顺便报错,错误信息也是自己写的。

绝对没绝对 回答采纳率:9.8% 2010-07-22 13:22 您已经评价过!好:0 您已经评价过!不好:0 在数据库中的用户表中添加一个字段 a(自定义)

a 的值为 0 说明是没记住密码的

a的值为1 说明是记住密码的

登录的时候选择记住密码 用户信息存入cookies

a=0 就存入密码信息

a=1 就不存入用一个默认值替代

程序启动时然后通过读取cookie里的用户信息就可以了

(密码要经过加密才行)



个人思路 。。。。没试过

不过现在的浏览器提供这个功能的。。

科 回答采纳率:57.1% 2010-07-23 11:04 您已经评价过!好:0 您已经评价过!不好:0 如果是从c/s模式可以采用md5加密方式写到本地文件加载时在解密就ok啦。

如果是b/s模式可以用cookies保存。

252045798 2010-07-24 10:41 您已经评价过!好:0 您已经评价过!不好:0 首先得有个地方保存这串字符,IO或者数据库都行;
加密就不用说了,各种加密算法例子到网上一搜一大堆。

颠之 回答采纳率:7.7% 2010-07-26 14:23 您已经评价过!好:0 您已经评价过!不好:0 我想是这样子。

比如QQ 的记住密码



可以存在本地文件的。

然后创造一种你自己独有的加密算法和解密算法

比如把密码解析成数字 然后再将这些数字 乱除啊乱乘啊乱减的



然后读的时候或许可以这样子

把文件内容传到服务端 然后就交给服务端去解析并且判断密码正确否



或许这是愚见

问问团队 Java我的革命 共1人编辑答案 2010-07-27 04:49 您已经评价过!好:0 您已经评价过!不好:0 源码我写不出

不过qq这种绝对不是用的cookie和session

仔细看qq安装路径里面 有以你qq号码命名的文件 里面存储的就是你一些聊天信息和个人设置 包括密码 当然 这些都是经过加密过的 当然 也可以解密 不是有破解qq密码的软件吗?就是通过解密电脑里的文件获得的

Artemis 回答采纳率:44.1% 2010-07-27 21:29 您已经评价过!好:0 您已经评价过!不好:0 你写QQ肯定用到了用户实体类对不对?



既然你写的是QQ,那么肯定是传送对象的对不对?



既然你的实体类要用同网络传输,那么肯定实现了,ser。。。。(单词我记不住,但是他叫中文“序列化”)



既然你实体类实现了序列化,那么你就可以用ObjectOutputStream.writeObject(你的用户对象)



这样就能吧你的用户实体类序列化在本机(包括你的密码)



到时候你在根据他输入的QQ号改变,而去读取不同的序列化文件



你也可以自定义加密密码, 读取的时候在按照你的加密方式解密出来,



不知道你能否明白?
您已经评价过!好:0 您已经评价过!不好:0 问问专家团 Kitty 活到老,学到老! 向他求助
等级:2 共1人编辑答案 2010-07-28 16:33
楼上的楼上的 说的很对 QQ保存用户名密码什么的 是把信息写到本地的配置文件里面的~
您已经评价过!好:0 您已经评价过!不好:0 问问专家团 安靜の聽 没有最好,只有更好~ 向他求助
等级:5 共1人编辑答案 2010-07-28 16:40
cs的一定要写在property里,java有个properties类,你可以设定一个本地文件,然后读取特定的属性,或是改变一个已经存在于属性文件中的值,很简单,你不信去看吧
补充回答: 不过一定要有一定的加密机制,这是肯定的
随时间消逝 回答采纳率:14.8% 2010-07-30 15:50 您已经评价过!好:0 您已经评价过!不好:0 。。。呵呵、这个问题、我昨天才解决、用 cookie 来实现、具体核心代码如下:

这个一个页面模拟的cookie,如果你要实现登录,当用户输入用户名密码时,到控制层用
Cookie user = new Cookie("user",name+"-"+passward);
加到cookie中,然后在访问此登录页面时,就先调用
Cookie[] cookies=request.getCookies(); 看cookie中是否有user这个值,如果有就取得用户名、密码。
代码示例:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String name="nihao";
String passward="nihao";
try{
Cookie user = new Cookie("user",name+"-"+passward);
user.setMaxAge(60);
response.addCookie(user);
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("user")){
name=cookies[i].getValue().split("-")[0];
passward=cookies[i].getValue().split("-")[1];
request.setAttribute("name",name);
request.setAttribute("pass",passward);
}
}
}
}catch(Exception e){
e.printStackTrace();
}

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<form action="test10.jsp" method="post">
<input type="text" value="${name}" name=name /></br>
<input type="text" value="${pass}" name=pass />
<input type="submit" value="提交">
</form>
</body>
</html>
补充回答:
思路都差不多、方法二如下:

前台登陆主页面的主要代码如下:

<%


Cookie[] cookies = request.getCookies(); //得到Cookie的值


if(cookies!= null&&cookies.length > 1){

for(int i=0; i<cookies.length; i++){
     if(cookies[i].getName().equals("userName")){
request.setAttribute("name", cookies[i].getValue()); //设置属性值
}else if(cookies[i].getName().equals("passWord")){
    request.setAttribute("pass",cookies[i].getValue());
}

}
}else { //如果得到的Cookie的值为空
request.setAttribute("name", "");
request.setAttribute("pass", "");
}
%>


<center>
<form action="testWeb.do" method="post">
<table>
<tr> <td>用户名</td>
<td><input type="text" name="userName" width="150px" value="${name }"></td>
</tr>
<tr> <td>密码</td>
<td><input type="password" name="passWord" width="150px" value="${pass }"></td>
</tr>
<tr> <td></td>
<td> <input type="checkbox" name="rember" value="rem">记住密码</td>
</tr>
<tr>
<td><input type="submit" value="提交"></td> <td></td>
</tr>
</table>
</form>
</center>

后台Action中的代码如下:

TestWebActionForm taf = (TestWebActionForm)form;


if(request.getParameter("rember") != null && request.getParameter("rember").equals("rem")){


if(taf.getUserName().equals("a")&&taf.getPassWord().equals("a")){


Cookie cookie1 = new Cookie("userName", "a"); //添加用户名Cookie


response.addCookie(cookie1);


Cookie cookie2 = new Cookie("passWord", "a"); //添加密码Cookie


response.addCookie(cookie2);


return mapping.findForward("success");


}else{


return mapping.findForward("fail");


}


}else {


if(taf.getUserName().equals("a")&&taf.getPassWord().equals("a")){


return mapping.findForward("success");


}else{


return mapping.findForward("fail");


}


}

。。。希望你早日实现该功能哈 。。。嗯 。。。

坏o小磊呢o? 回答采纳率:36.8% 2010-08-01 23:20 您已经评价过!好:0 您已经评价过!不好:0 如果保存在服务器端数据库,我能想到的只有根据客户端的IP地址,然后服务端给这个密码了。

如果保存在本地,你就找一下StringWriter类、FileOutputStream类等几个类,再上网找一下md5或者sha1加密算法(要java实现的),就ok了。
您已经评价过!好:0 您已经评价过!不好:0 问问专家团 微软首席专家团 我们爱你们。 向他求助
等级:6 共1人编辑答案 2010-08-02 15:24
搜索答案提 问
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值