发表于: 2017-07-21 23:18:27
2 882
今天完成的事情:
今天一直在研究Token和session的,找到的都是简介,
学习了Cookie,session,token的区别:
Cookie:是服务段生成的一段加密的字符串存放在客户端的某个文件夹里,最大4k,
session:客户端与服务端进行一次会话就会生成一个session,session可以设置在服务器存放的时间
用户离开后一段时间会被销毁,相对于Cookie来说更安全但也有弊端,就是如果服务器进行了负载均衡,那么下次如果访问别的服务器的时候,session会丢失,因为session一段时间会保存在服务器上,当访问增多,会比较占用系统资源,这种时候就可以使用
Cookie和session结合,Cookie存放用户信息,session存放用户密码
token: 是“令牌”,是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库
今天下午完善了一下代码先上传到服务器上,我的登录校验看似没什么问题,但是全部用if else完成会有很浪费资源,频繁的遍历和访问数据库,我也知道不对但是不知道怎么改,
想找一段demo先看一看但是一直找不到,后来问我一个伙计,他让我搜索"拦截器实现自动登录",最后找到了,我一直在搜索"Token实现代码"等,即使找到了也忽略了,找了一天,略蛋疼...
最后找到了一个最近的代码,但是报错了
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loginController' defined in file [E:\Web\Task_5_2\target\ssm\WEB-INF\classes\cn\com\susq\controller\LoginController.class]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class cn.com.susq.controller.LoginController.
放一下我的登录校验代码:
//注册校验
@RequestMapping(value = "/ok", method = RequestMethod.POST)
public String ok(Register register, Model model) throws Exception {
for (Register res : categoryMapper.getUsername()
) {
if (register.getUsername().equals(res.getUsername())) {
model.addAttribute("name_error", name_error);
return "register";
} else if (register.getEmail().equals(res.getEmail())) {
model.addAttribute("email_error", email_error);
return "register";
} else {
break;
}
}
DesUtil des = new DesUtil("12345678");
//加密密码
String uname = des.encrypt(register.getPassword());
register.setPassword(uname);
categoryMapper.register(register);
model.addAttribute("name", register.getUsername());
return "ok";
}//登录校验
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(Register register, Model model) {
try {
DesUtil des = new DesUtil("12345678");
Register res = categoryMapper.login(register.getEmail());
//输出解密后的密码
System.out.println(des.decrypt(res.getPassword()));
//拿解密后的密码和用户输入的密码进行比较
if (des.decrypt(res.getPassword()).equals(register.getPassword())) {
model.addAttribute("success", success);
return "ok";
} else {
model.addAttribute("failure", failure);
return "register";
}
} catch (NullPointerException e) {
model.addAttribute("failure", failure);
return "register";
} catch (Exception e) {
e.printStackTrace();
return "register";
}}
注册信息表
如果用户名或密码错误输出提示信息
因为凡尘已经存在
如果邮箱存在
如果注册成功进入成功页面
这是昨天写的,今天没干什么
明天计划的事情:
解决异常,重新写登录校验
遇到的问题:
高亮
收获:
无,很蛋疼的一天.
页面展示:
www.fancen.space
评论