日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java+filter加密_Javaweb之Filter案例练习-自动登录问题和MD5加密

發布時間:2025/3/12 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。