自动登录问题和MD5加密
前面已经完成了Filter的自动登录,但是有问题,我们在web.xml中Filter的url-mapping中配置的规则是/*, 也就是这个网站的所有请求都拦截。这肯定不合适。我们本来访问/login.jsp,本来就是去登录,结果也进行了拦截。
解决自动登录问题
其实,我们可以在AutoLoginFilter.java这个文件中写if语句来判断,虽然web.xml文件还是配置拦截/*, 但是只有在if满足条件,才进行拦截,否则,直接放行就好。
下面if条件,我们不希望/login.jsp 和/loginServlet这两个请求地址被拦截,所以这里取反,使用!符号。意思就是除了这两个之外地址都拦截。
package com.kaigejava.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.anthony.domain.User;
import com.anthony.service.UserService;
import com.anthony.service.UserServiceImpl;
public class AutoLoginFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 1 转换两个对象 HttpServletRequest HttpServletResponse
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
// 优化
String uri = req.getRequestURI(); // 浏览器中url端口8080后面部分
String path = req.getContextPath(); // 应用名称
path = uri.substring(path.length()); // /login.jsp
if (!("/login.jsp".equals(path)) || ("/loginServlet".equals(path))) {
// 2.处理业务, 这里是得到cookies
// 优化
User user = (User) req.getSession().getAttribute("user");
if (user == null) { // 说明从来没有登录过
Cookie[] cookies = req.getCookies();
String username = "";
String password = "";
for (int i = 0; cookies != null && i < cookies.length; i++) {
if ("user".equals(cookies[i].getName())) {
String value = cookies[i].getValue(); // username&password这样一个格式字符串
// 得到用户名和密码
String[] values = value.split("&");
username = values[0];
password = values[1];
}
}
UserService us = new UserServiceImpl();
User u = us.findUser(username, password);
if (u != null) { // 如果登录成功,把用户信息存到session中
req.getSession().setAttribute("user", u);
}
}
}
// 3.放行
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
可以再次测试下,例如在LoginServlet中或者打印用户名和密码字段,可以发现只执行了一次登录,也就是没有被拦截。
MD5加密
第一个要知道的是MD5(Message-Digest Algoorithm 5)是一种不可逆的加密算法。也就是只能加密,不能解密操作。那么我们登录是如何做到呢,一般来说数据库中用户名密码肯定采用MD5加密。在后台拿到前端获取密码,然后把这个密码通过MD5加密,然后传入数据库和密码这栏比较,相等就说明密码一样。
先来看看MD5加密效果
上面这个图是用户密码在数据库中是没有加密过的,下面我们执行把第二个用户进行md5加密之后,看看加密之后密码处的效果。
UPDATE users SET PASSWORD=MD5(PASSWORD) WHERE id=2;
这个一长串密码就是MD5加密之后的效果。
Java中如何使用MD5加密
这个MD5加密方法算一个工具类吧,网上很容易搜到,下面是代码方法
package com.kaigejava.util;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
public static String md5(String plainText) {
byte[] secreBytes = null;
try {
secreBytes = MessageDigest.getInstance("md5").digest(plainText.getBytes());
}catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有md5这个算法!");
}
String md5code = new BigInteger(1, secreBytes).toString(16);
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
}
登录过程使用加密密码
在LoginServlet.java中处理登录,这个我们通过request.getParameter(“password”)得到的密码肯定是明文的,这时候我们需要先给password进行MD5加密,然后进行登录操作。(前提是用户注册过程中,后台代码在处理注册的servlet中就把用户密码给进行MD5加密,然后保存在数据中的密码就是加密的形式)
上面如果是在注册的servlet中也这样对password进行加密。
相关推荐
JavaWeb学习笔记,自己使用 ---------------------------------凑字数的小尾巴
Jsp-Order-online+javaweb 网上点餐项目Jsp-Order-online+javaweb 网上点餐项目Jsp-Order-online+javaweb 网上点餐项目Jsp-Order-online+javaweb 网上点餐项目Jsp-Order-online+javaweb 网上点餐项目Jsp-Order-on...
本项目"javaWeb项目 filter练习"主要关注了两个核心的应用场景:编码过滤和登录过滤。下面将详细介绍这两个方面的内容。 **编码过滤** 在Web应用中,数据从客户端传输到服务器时,可能会遇到编码不一致的问题,导致...
### JavaWEB项目开发案例...总之,《JavaWEB项目开发案例精粹》通过丰富的案例和实践经验分享,为读者提供了一个全面、深入理解JavaWEB开发的平台。希望每位读者都能够从中获益匪浅,并在未来的工作中取得更大的成就。
Javaweb-实训项目开发-ider前后端数据分离+数据库操作+md5加密 前端:7张html,包括注册,登录,主页,列表修改,后端数据查看删除 后端:数据库连接+Dao模型数据分离,使用Java类和接口实现 注意:本项目未使用jsp...
3. **MD5加密(选做)** 为了增强安全性,系统可以选择使用MD5算法对用户的密码进行加密存储。这样即使数据库被泄露,原始密码也无法直接获取,增加了破解的难度。 4. **工作流程** 用户操作触发前端页面向...
【标题】"javaweb小案例-网上商城"是一个基于JavaWeb技术的简易电商平台实现,主要涵盖了基础的web开发功能,未使用任何特定的框架。这个案例提供了浏览商品、查看商品详情、使用购物车、查看订单以及分页显示等常见...
利用commons-fileupload-1.2.1.jar实现上传下载,很简单的案例,连接数据库存储信息 详见:http://www.cnblogs.com/xiaoduc-org/p/5415797.html
在IT行业中,JavaWeb开发是构建基于Web应用程序的常用技术之一。这个新手入门案例"数据库连接登录注册"是一个非常适合初学者了解如何在...同时,MD5加密和注解的使用也展示了实际开发中的安全实践和简洁编程思想。
6. **Filter与Listener**:过滤器(Filter)和监听器(Listener)是JavaWeb的重要组件,用于拦截请求、响应,以及监听Web应用的各种事件,如会话创建、销毁等。 7. **Tomcat服务器**:Tomcat是最常用的JavaWeb应用...
这是我学了一段时间的JavaWeb后用于熟悉熟悉前面学习的内容,用到了MyBatis和Servlet因为只是为了熟悉熟悉,所以怎么简单怎么写的,甚至连表单校验都没有做,怕哪天复习但是东西遗失了,发一个出来保存
JavaWeb RSA密码加密登录-附件资源
JavaWeb课程设计---客户管理系统方案.doc
JavaWeb期末大作业--在线相册管理系统源码+数据库文件.zip主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。包含全部项目源码、该项目可以直接使用、项目都经过严格调试,下载...
JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter...
注册登录中的MD5加密及图形验证码的实现。