java+filter加密_Javaweb之Filter案例练习-自动登录问题和MD5加密
自动登录问题和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
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进行加密。
java+filter加密_Javaweb之Filter案例练习-自动登录问题和MD5加密相关推荐
- 案例:自动登录12306
10.案例:自动登录12306 文章目录 10.案例:自动登录12306 一.流程分析 二.代码示例 一.流程分析 1 打开连接:https://kyfw.12306.cn/otn/resources ...
- java filter过滤器_JavaWeb之 Filter(过滤器)
FIlter作用 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如 ...
- python凯撒密码加密写入文件_Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作...
#-*- coding: gb2312 -*-#用户名密码登录系统(MD5加密并存入文件)及对字符串进行凯撒密码加解密操作#作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/k ...
- Vue 登录密码验证 MD5加密
一.特点 1.压缩性:任意长度的数据,算出的MD5值长度都是固定的. 2.容易计算:从原数据计算出MD5值很容易. 3.抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别 ...
- filter过滤器_JavaWeb之 Filter(过滤器)
FIlter作用 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如 ...
- 【java小程序实战】小程序短视频后台项目之MD5加密工具类
对字符串进行简单加密,直接上代码: package com.imooc.utils;import org.apache.commons.codec.binary.Base64;import java. ...
- 登录安全----双重MD5加密实现安全登录
个人简介:
- Java实现MD5加密和文件校验
MD5简介: MD5的全称:Message-Digest Algorithm 5(信息-摘要算法5) MD5的加密方式是一种哈希加密.一些主流的编程语言都已经实现了MD5的加密,所以如果你的程序或是系 ...
- Java实现MD5加密及解密的代码实例分享
如果对安全性的需求不是太高,MD5仍是使用非常方便和普及的加密方式,比如Java中自带的MessageDigest类就提供了支持,这里就为大家带来Java实现MD5加密及解密的代码实例分享: 基础:M ...
最新文章
- codeforce708C:树形dp+二次扫描
- [HTML]JS添加表格
- 原理图、PCB和实物是如何对应起来的
- mybatis里的日志实现顺序
- Java路径问题最终解决方案
- cv2 python3.5 linux,ubuntu 16.04 安装 opencv3.2.0 with python 3.5
- 第一百一十五期:Web开发必须掌握的三个技术:Token、Cookie、Session
- 诗歌,一路走来...
- MyEclipse SVN插件的安装
- 微信小程序设计稿pt怎么转rpx
- 3D摇杆控制器一种简单实现!Cocos Creator 3D!
- 极域电子教室师生端连接不上怎么解决
- java工程师面试题
- 【优化调度】基于粒子群算法求解梯级水电站调度问题matlab代码
- 阅读Hierarchical Graph Representation Learning with Differentiable Pooling(NeurIPS 2018)
- 微信小程序体验版与调试模式不同
- 修改gradle版本android,Android Studio 修改Gradle版本
- 实战python+django+mysql开发详细步骤及代码学习
- 微软office办公套件 Microsoft Office 2021 Mac版 支持更新(内附安装包链接)
- 统计图表着实方便,这个可视化工具太赞了~~
热门文章
- 如何用unit test测试controller_如何用电缆故障测试仪冲闪测试确定故障点?
- keep行走和计步_App Store 上的“Keep - 跑步健身计步瑜伽”
- 忽视大小写函数_使用率低但功能强大的6个Excel函数公式应用技巧解读!
- oracle 视图带条件,Oracle视图可以进行DML操作的条件
- mysql 删除not null_从MySQL的列中删除NOT NULL限制?
- python增加工作日列_将工作日添加到日期字段
- php 表单提交文件大小,PHP如何通过表单直接提交大文件详解
- 绿盟漏洞扫描_主机安全漏洞解决方案
- python画锯齿波_用Python控制硬件35-自制二三十元成本的信号测量采集控制系统
- 矩阵论复习-过渡矩阵、生成子空间、表示矩阵、度量矩阵、酉空间、内积