自动登录问题和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加密相关推荐

  1. 案例:自动登录12306

    10.案例:自动登录12306 文章目录 10.案例:自动登录12306 一.流程分析 二.代码示例 一.流程分析 1 打开连接:https://kyfw.12306.cn/otn/resources ...

  2. java filter过滤器_JavaWeb之 Filter(过滤器)

    FIlter作用 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如 ...

  3. python凯撒密码加密写入文件_Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作...

    #-*- coding: gb2312 -*-#用户名密码登录系统(MD5加密并存入文件)及对字符串进行凯撒密码加解密操作#作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/k ...

  4. Vue 登录密码验证 MD5加密

    一.特点 1.压缩性:任意长度的数据,算出的MD5值长度都是固定的. 2.容易计算:从原数据计算出MD5值很容易. 3.抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别 ...

  5. filter过滤器_JavaWeb之 Filter(过滤器)

    FIlter作用 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如 ...

  6. 【java小程序实战】小程序短视频后台项目之MD5加密工具类

    对字符串进行简单加密,直接上代码: package com.imooc.utils;import org.apache.commons.codec.binary.Base64;import java. ...

  7. 登录安全----双重MD5加密实现安全登录

    个人简介:

  8. Java实现MD5加密和文件校验

    MD5简介: MD5的全称:Message-Digest Algorithm 5(信息-摘要算法5) MD5的加密方式是一种哈希加密.一些主流的编程语言都已经实现了MD5的加密,所以如果你的程序或是系 ...

  9. Java实现MD5加密及解密的代码实例分享

    如果对安全性的需求不是太高,MD5仍是使用非常方便和普及的加密方式,比如Java中自带的MessageDigest类就提供了支持,这里就为大家带来Java实现MD5加密及解密的代码实例分享: 基础:M ...

最新文章

  1. codeforce708C:树形dp+二次扫描
  2. [HTML]JS添加表格
  3. 原理图、PCB和实物是如何对应起来的
  4. mybatis里的日志实现顺序
  5. Java路径问题最终解决方案
  6. cv2 python3.5 linux,ubuntu 16.04 安装 opencv3.2.0 with python 3.5
  7. 第一百一十五期:Web开发必须掌握的三个技术:Token、Cookie、Session
  8. 诗歌,一路走来...
  9. MyEclipse SVN插件的安装
  10. 微信小程序设计稿pt怎么转rpx
  11. 3D摇杆控制器一种简单实现!Cocos Creator 3D!
  12. 极域电子教室师生端连接不上怎么解决
  13. java工程师面试题
  14. 【优化调度】基于粒子群算法求解梯级水电站调度问题matlab代码
  15. 阅读Hierarchical Graph Representation Learning with Differentiable Pooling(NeurIPS 2018)
  16. 微信小程序体验版与调试模式不同
  17. 修改gradle版本android,Android Studio 修改Gradle版本
  18. 实战python+django+mysql开发详细步骤及代码学习
  19. 微软office办公套件 Microsoft Office 2021 Mac版 支持更新(内附安装包链接)
  20. 统计图表着实方便,这个可视化工具太赞了~~

热门文章

  1. 如何用unit test测试controller_如何用电缆故障测试仪冲闪测试确定故障点?
  2. keep行走和计步_‎App Store 上的“Keep - 跑步健身计步瑜伽”
  3. 忽视大小写函数_使用率低但功能强大的6个Excel函数公式应用技巧解读!
  4. oracle 视图带条件,Oracle视图可以进行DML操作的条件
  5. mysql 删除not null_从MySQL的列中删除NOT NULL限制?
  6. python增加工作日列_将工作日添加到日期字段
  7. php 表单提交文件大小,PHP如何通过表单直接提交大文件详解
  8. 绿盟漏洞扫描_主机安全漏洞解决方案
  9. python画锯齿波_用Python控制硬件35-自制二三十元成本的信号测量采集控制系统
  10. 矩阵论复习-过渡矩阵、生成子空间、表示矩阵、度量矩阵、酉空间、内积