发表于: 2017-08-19 20:45:43
3 1247
今天做的事:
开始任务五,写出了一个登陆界面,需要新建一个user表,来存储用户登陆信息
然后是登陆的jsp页面
login.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=utf-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>登陆</title>
<body>
<div style= "width:200px;height:150px;margin:0 auto;border:1px solid;">
<form:form action="${pageContext.request.contextPath}/login" method="post" modelAttribute="user">
用户名:<form:input path="user"/><br/>
密码: <form:input path="password"/><br/>
<br/>
<hr>
<input type="submit" name="Submit" value="登录">
<input type="reset" name="Submit2" value="重填">
</form:form>
</div>
</body>
</html>
然后添加了一点逻辑来判断用户登陆,不过考虑的也不是很全面
@Service
public class userServiceImpl implements userService {
private User checkUser = new User();
private boolean flag = false;
@Autowired
UserMapper uM;
public boolean insert(User u){
try {
int i = uM.insert(u);
if (i > 0) {
System.out.println("插入成功");
} else {
System.out.println("插入失败");
}
flag = true;
}catch (Exception e){
e.printStackTrace();
System.out.println("重复用户名");
flag = false;
}
return flag;
}
public boolean check(User user){
try {
checkUser = uM.selectByUser(user.getUser());
if (checkUser.getPassword().equals(user.getPassword())){
uM.updateLogTime(System.currentTimeMillis());
flag = true;
}
else
flag = false;
}catch (Exception e){
System.out.println("找不到用户名");
}
return flag;
}
}
而且页面现在没有写注册功能,就先不写了。
controller中是这么写的
@RequestMapping(value = "/login",method = RequestMethod.GET)
public String getlog(Map<String,Object> map){
map.put("user",new User());
return "login";
}
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String login(User u){
try{
DesUtil des = new DesUtil("JAVA");
String str = u.getUser() + "" + u.getLogtime();
String Token = des.encrypt(str);
String decToken = des.decrypt(Token);
String[] sArr = decToken.split(",");
String username = sArr[0];
String logTime = sArr[1];
flag = uS.check(u);
}catch (Exception e){
e.printStackTrace();
}
System.out.println(flag);
if(flag == true)
return "redirect:/Index";
else
return "redirect:/error";
}
这里面有DES加密功能,可以先暂时跳过
反正启动后是这样的
暂时通过重定向跳转
接下来是DES加密和MD5加密
链接在这,我就不贴代码了,我都是贴的
http://z2009zxiaolong.iteye.com/blog/1562197
只不过还需要一定的处理,因为要拼接用户名和登陆时间,所以需要对加密解密进行一定处理,都写在controller中了。
下面是事例代码的运行结果
测试类
import org.junit.Test;
/**
* Created by Administrator on 2017/08/19.
*/
public class ATest {
@Test
public void testMD5(){
try{
DesUtil des = new DesUtil("JAVA");
String username = "admin";
Long logTime = System.currentTimeMillis();
String time = "" +logTime;
String last = username + "," + time;
String fff = des.encrypt(last);
System.out.println(fff);
String defff = des.decrypt(fff);
System.out.println(defff);
String[] sArr = defff.split(",");
String user1 = sArr[0];
String time1 = sArr[1];
System.out.println(user1);
System.out.println(time1);
Long logTime1 = Long.parseLong(time1);
System.out.println(logTime1);
// String src = "加个密";
// String src1 = Md5Util.getMd5(src);
// String src2 = des.encrypt(src);
// String src3 = des.decrypt(src2);
// String src4 = Md5Util.getMd5(src3);
//
//
// System.out.println("MD5加密前:" + src);
// System.out.println("MD5加完了:" + src1);
// System.out.println("DES加密:" + src2);
// System.out.println("DES解密:" + src3);
// System.out.println("DES解密后MD5加密:" + src4);
}catch (Exception e){
e.printStackTrace();
}
}
}
结果
之后需要学习cookie。
今天大概了解了一下cookie的用处,Cookie通过在客户端记录信息确定用户身份
就是之前加密后生成的Token令牌
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
cookie还有有效期,可以由我们设置。
还有点骚操作:
1.Long转化为String:String = "" + Long;
String转化为Long:long l = Long.parseLong([String]);
这里
Long.ValueOf("String")返回Long包装类型
Long.parseLong("String")返回long基本数据类型
2.String转化为String数组
设定一个分隔符,然后用split方法
如上面用到的
String[] sArr = defff.split(",");
可以进行分隔,这里的defff是String类型
明天还要爬山,所以就把cookie实现和配置拦截器等等放到明天来做吧。。。
明天看这篇blog:http://blog.csdn.net/eunyeon/article/details/52892028
明天计划:不会猝死在爬山途中。
问题:暂无,今天加密算法内容没深究,就直接使用工具了,没了解原理
收获:生成Token令牌的过程;以及加密解密的一些处理。
进度:开始时间:2017.08.19
预计demo:2017.08.21
是否有延期风险:不确定
禅道链接:http://task.ptteng.com/zentao/project-task-285-unclosed.html
评论