发表于: 2017-08-19 20:45:43

3 1249


今天做的事:

开始任务五,写出了一个登陆界面,需要新建一个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



返回列表 返回列表
评论

    分享到