91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Javaweb之Filter案例練習-自動登錄問題和MD5加密

發布時間:2020-07-10 17:39:15 來源:網絡 閱讀:378 作者:凱哥Java 欄目:編程語言

自動登錄問題和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加密效果

Javaweb之Filter案例練習-自動登錄問題和MD5加密

上面這個圖是用戶密碼在數據庫中是沒有加密過的,下面我們執行把第二個用戶進行md5加密之后,看看加密之后密碼處的效果。

UPDATE users SET PASSWORD=MD5(PASSWORD) WHERE id=2;

Javaweb之Filter案例練習-自動登錄問題和MD5加密

這個一長串密碼就是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加密,然后保存在數據中的密碼就是加密的形式)

Javaweb之Filter案例練習-自動登錄問題和MD5加密

上面如果是在注冊的servlet中也這樣對password進行加密。



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉木萨尔县| 泸州市| 剑阁县| 桐梓县| 陕西省| 天柱县| 江永县| 昔阳县| 海兴县| 衡阳市| 崇文区| 湖北省| 汾阳市| 孝感市| 洪雅县| 拜城县| 二连浩特市| 维西| 集贤县| 独山县| 洛川县| 阿拉尔市| 任丘市| 白城市| 隆回县| 洪江市| 漳州市| 漠河县| 敦化市| 资讯| 泽州县| 连山| 武宣县| 长子县| 瓮安县| 大宁县| 安仁县| 榆中县| 宁国市| 平湖市| 保靖县|