发表于: 2017-07-06 21:04:44
1 985
今天:主要学习了任务需要的知识,完成了任务5的大部分内容,还剩下用MD5加密和把时间加密进去。
1. 学习了cookie,cookie类的几个方法怎么用,怎么设置cookie的有效期和有效路径,怎么添加cookie到Response里,怎么取出cookie的key和值,cookie默认的有效期是什么等。
2. 学习了SpringMVC中如何配置拦截器,怎么配置拦截器所作用的地址范围,多个拦截器中方法的不同顺序。
3. 了解了Des加密是一个对称加密的方式,现在很少使用了,找了一个Des加密的jar包。
4. 完成了任务5的大部分内容,在数据库中加入了用户名和密码的变量,修改了Dao和Model,Service,加入对用户名密码的验证,加入了一个拦截器来拦截地址是/u的页面,写了一个加密用的帮助类,在controller里登陆时加密用户名,并返回cookie,在拦截器里解密,解密传来cookie中的信息,并调用Service返回一个boolean值看是否有此用户。
部分代码:
拦截器:
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Cookie [] cookies = request.getCookies();
for(Cookie cookie : cookies){
if (cookie.getName().equals("username")){
String username = desCipher.decrypt(cookie.getValue());
return userService.checkUsername(username);
}
}
return false;
}
加密的帮助类(网上找的,不是很懂)
public class DesCipher {
private final char[] password = {'1','2','3','4','5','6','7','8'};
public String decrypt(String input) throws IOException, GeneralSecurityException {
byte [] dataEn = input.getBytes("UTF-8");
byte [] dataDe = OpenSSL.decrypt("des3", password, dataEn);
return new String(dataDe, "UTF-8");
}
public String encrypt(String input) throws IOException, GeneralSecurityException{
byte[] dataDe = input.getBytes("UTF-8");
byte[] dataEn = OpenSSL.encrypt("des3", password, dataDe);
return new String(dataEn, "UTF-8");
}
}
登陆控制器:
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String homePageLoginHandler(HttpServletRequest request, HttpServletResponse response) throws IOException, GeneralSecurityException {
User user = userService.getUserByLogin(request);
if(user == null){
request.setAttribute("message", "用户或密码不正确");
}
else{
String usernameEn = desCipher.encrypt(user.getUsername());
usernameEn = usernameEn.substring(0, usernameEn.length() - 2);
Cookie cookie = new Cookie("username", usernameEn);
cookie.setMaxAge(100);
cookie.setPath("/");
response.addCookie(cookie);
request.setAttribute("message", "用户 " + user.getName() + " 登陆成功!");
}
return "homepage";
}
Service中新增方法:
@Override
public User getUserByCookies(HttpServletRequest request) {
Cookie [] cookies = request.getCookies();
if(cookies != null && cookies.length > 0){
for (Cookie cookie : cookies){
if (cookie.getName().equals("username")){
return getUserByUsername(cookie.getValue());
}
}
}
return null;}
@Override
public boolean checkUsername(String username) {
if(getUserByUsername(username) != null){
return true;
}
return false;
}
@Override
public User getUserByLogin(HttpServletRequest request) {
String username = request.getParameter("username");
String password = request.getParameter("password");
if(checkPassword(username, password)){
return getUserByUsername(username);
}
return null;
}
public boolean checkPassword(String username, String password){
User user = getUserByUsername(username);
if(user == null){
return false;
}
else {
if (password.equals(user.getPassword())){
return true;}
else {
return false;
}
}
}
问题:
1. 同时加密用户名和登陆时间传入cookie,拦截器拦截的时候,登录时间是用来做什么?
明天:
1. 把登陆时间的加密加进去
2. 把MD5加进去
3. 了解Des算法和MD5算法。
4. 完成任务4不过关的地方。
总结:无
评论