最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解JavaEE使用過濾器實現(xiàn)登錄(用戶自動登錄 安全登錄 取消自動登錄黑用戶禁止登錄)

 更新時間:2016年05月19日 10:49:40   作者:YX_blog  
主要介紹用戶的自動登錄和取消自動登錄,以及實現(xiàn)一天自動登錄或者n天實現(xiàn)自動登錄,當(dāng)用戶ip被加入到黑名單之后,直接利用過濾器返回一個警告頁面。接下來通過本文給大家介紹JavaEE使用過濾器實現(xiàn)登錄的相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧

在我們生活中,對于賬戶的自動登錄已經(jīng)很常見了,所以利用過濾器實現(xiàn)這個功能。

主要介紹用戶的自動登錄和取消自動登錄,以及實現(xiàn)一天自動登錄或者n天實現(xiàn)自動登錄,當(dāng)用戶ip被加入到黑名單之后,直接利用過濾器返回一個警告頁面。

過濾器的功能很是強大,我們只需要在寫好的前臺后servlet之后進行添加就可以實現(xiàn)這個功能

Ps:這個僅僅只是一個演示而已,里面的訪問數(shù)據(jù)庫的部分,自己隨意模擬了下,主要是突出實現(xiàn)自動登錄的功能。

前臺代碼:

前臺代碼是成功與否都在這個頁面顯示。用到的技術(shù):jstl標(biāo)簽的應(yīng)用,session讀取值

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
</head> 
<body> 
<c:if test="${!empty sessionScope.error }"> 
你的密碼或用戶名錯誤。<!-- 顯示后就需要把里面的值移走 --> 
<c:remove var="error" scope="session"/> 
</c:if> 
<c:if test="${empty sessionScope.user }" var="boo"> 
<h2>這是登錄的頁面</h2> 
<form action="<c:url value='/LoginServlet'/>" method="post"> 
NAME:<input type="text" name="name" /><br/> 
PWD:<input type="text" name="pwd" /><br/> 
不自動登錄:<input type="radio" name="time" value="0" /><br/> 
一天:<input type="radio" name="time" value="1" /><br/> 
七天:<input type="radio" name="time" value="7" /><br/> 
<input type="submit" value="提交" /> 
</form> 
</c:if> 
<c:if test="${!boo }"> 
歡迎您,${sessionScope.user },登錄成功 
<a href="">模塊一 </a> 
<a href="">模塊2 </a> 
<a href="<c:url value='/CancelAutoLogin'/>">取消自動登錄</a> 
</c:if> 
</body> 
</html> 

servlet的實現(xiàn)代碼:

和以前的代碼一樣,只負(fù)責(zé)和前臺交互即可:里面用到的技術(shù)有url編碼,值存在cookie里面,存在session里面,頁面跳轉(zhuǎn)(轉(zhuǎn)發(fā))

public void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
String name=request.getParameter("name"); 
String pwd=request.getParameter("pwd"); 
String time=request.getParameter("time"); 
if(name!=null && pwd!=null && name.equals(pwd)){//此處隨意寫寫,后面應(yīng)該去servvice-->dao訪問數(shù)據(jù)庫 
//這里假設(shè)登錄成功了,我們把信息存入session里面 
request.getSession().setAttribute("user", name); 
//兼容中文,我們需要進行編碼 
name=URLEncoder.encode(name, "utf-8"); 
pwd=URLEncoder.encode(pwd, "utf-8"); 
Cookie c =new Cookie("autologin", name+","+pwd);//這個value不能采用這種方式的,安全性考慮,我們必須知道采用加密,或者二次加密, 
int _time=60*60*24*Integer.valueOf(time); 
c.setMaxAge(_time); 
response.addCookie(c); 
response.sendRedirect(request.getContextPath()+"/index.jsp");//在過濾器中默認(rèn)的設(shè)置是攔截重定向,轉(zhuǎn)發(fā)是內(nèi)部直接轉(zhuǎn)發(fā),不過過濾器,不好辦,但是只需要在web.xml中配置就可以了。 
}else{ 
request.getSession().setAttribute("error", "1"); 
response.sendRedirect(request.getContextPath()+"/index.jsp"); 
} 
} 

到現(xiàn)在為止,都感覺沒有什么技術(shù),和以前的代碼一個,現(xiàn)在就是Filter的作用了。

安全登錄:

之前我們采用過動態(tài)導(dǎo)入來進行安全登錄,防止用戶進入項目之后,不用登錄,隨意輸入都可以進入界面,動態(tài)導(dǎo)入能夠?qū)崿F(xiàn)這個功能,但是,采用過濾器更好。

在過濾器中一般寫的都是dofilter();只需要判斷session容器里面是否為null,為null這說明這是沒有登錄的,直接踢回登錄界面,否,則放行

代碼呈上:

public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException { 
HttpServletRequest req=(HttpServletRequest) request; 
HttpServletResponse resp=(HttpServletResponse) response; 
String session=(String) req.getSession().getAttribute("user"); 
if(session==null){ 
System.out.println("非正常登錄"); 
resp.sendRedirect(req.getContextPath()+"/index.jsp"); 
}else{ 
System.out.println("成功登錄"); 
chain.doFilter(req, resp); 
} 
} 

字符編碼:

字符編碼的問題,以前每一次都需要在servlet的dopost()里面自己手動輸入,request.setCharacterEncoding("utf-8");每一個servlet都需要輸入,太麻煩,我們采用過濾器實現(xiàn);

代碼呈上:

<span style="font-size:18px;">public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException { 
request.setCharacterEncoding(character);//去客戶端接收的編碼 
response.setContentType("text/html;charset=utf-8");//設(shè)置發(fā)出去的編碼 
chain.doFilter(request, response); 
} 

@Override 
public void init(FilterConfig config) throws ServletException { 
character=config.getInitParameter("character");//a</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">haracter 設(shè)置為全局變量,</span><span style="font-size:18px;"> 
}</span> 

再上面的character定義為全局變量,初始值在web.xml中配置。

web.xml代碼呈上:

<filter> 
<filter-name>character</filter-name> 
<filter-class>cn.hncu.Filter.CharacterFilter</filter-class> 
<init-param> 
<param-name>character</param-name> 
<param-value>UTF-8</param-value> 
</init-param> 
</filter> 

自動登錄:

主要思路:自動登錄需要判斷session里面是都存有值,有,則登錄過了,沒有,就去本地cookie查找,存在,去數(shù)據(jù)庫匹配,若匹配成功,就把session容器添加值。

代碼呈上:

public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException { 
//自動登錄,必須要設(shè)置session里面是都有值,有,則當(dāng)前登錄過,沒有,就要去訪問cookie里面的數(shù)據(jù),cookie里面的數(shù)據(jù) 
//是否和數(shù)據(jù)庫里面的匹配,是,將session里面的值在這里設(shè)置,否,放走 
HttpServletRequest req=(HttpServletRequest) request; 
HttpServletResponse resp =(HttpServletResponse) response; 
String session =(String) req.getSession().getAttribute("user"); 
if(session==null){//說明當(dāng)前沒有登錄過 
Cookie cs[]=req.getCookies(); 
if(cs!=null){ 
for(Cookie c:cs){ 
if(c.getName().equals("autologin")){ 
String value=c.getValue();//這是經(jīng)過加密的,但是我們僅僅只是采用逗號連接了一下。 
String[] strs=value.split(",");//在logserlvet里面采用的是先編碼,再采用逗號連接,我們這里需要反過來 
String name=URLDecoder.decode(strs[0], "utf-8"); 
String pwd=URLDecoder.decode(strs[1], "utf-8"); 
//將name,pwd數(shù)據(jù)拿到后臺訪問數(shù)據(jù)庫,我們這里只是隨便寫寫 
if(name.equals(pwd)){ 
req.getSession().setAttribute("user", name);//設(shè)置session里面的參數(shù) 
break; 
} 
} 
} 
} 
} 
chain.doFilter(req, resp);//一定要放走哦。。 
} 

黑名單用戶

黑名單用戶,不準(zhǔn)登錄,直接告訴它結(jié)果

代碼呈上:

public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException { 
HttpServletRequest req=(HttpServletRequest) request; 
HttpServletResponse resp=(HttpServletResponse) response; 
String ip=req.getRemoteAddr();//獲取訪問的ip; 
System.out.println(ip+"IIPP"); 
if(set.contains(ip)){//在黑名單之內(nèi) 
System.out.println("set"); 
resp.getWriter().print("您屬于黑名單..<a href='"+req.getContextPath()+"/index.jsp'>返回</a>"); 
//返回也是不行的,因為index向服務(wù)器請求的時候就直接攔截了 
}else{ 
chain.doFilter(req, resp); 
} 
}

黑名單返回的類型為list最好,我這里是自己手動添加,原本應(yīng)該從寫一個工具類從數(shù)據(jù)庫讀取,不止能查,還能增刪改--黑名單。

代碼呈上:

Hashset 定義為全局變量,set里面含有contain,效率很高。

public void init(FilterConfig arg0) throws ServletException { 
//這里是黑名單列表,從數(shù)據(jù)庫中調(diào)取出來。這里只是簡單的模擬下 
set.add("192.132.0.12");//這是黑IP,這個是從后臺數(shù)據(jù)庫拿到的。 
set.add("localhost"); 
set.add("192.132.32.4"); 
set.add("127.0.0.1"); 
}

取消自動登錄

當(dāng)一直自動登錄認(rèn)為不安全,所以我們設(shè)置沒有自動登錄

之前我們知道,自動登錄靠的是cookie里面存的技術(shù),所以這里我們只需要將cookie刪除就可以了

因為取消自動登錄是超鏈接,所以寫的是servlet.

代碼呈上:

public void doPost(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException { 
Cookie cc=new Cookie("autologin", "");//刪除cookie的方法,就建立一個同名connkie,然后設(shè)置cookie的setmaxage=0; 
cc.setMaxAge(0); 
cc.setPath(req.getContextPath()); 
resp.addCookie(cc); 
resp.sendRedirect(req.getContextPath()+"/index.jsp"); 
} 

上面這些就能實現(xiàn)這些簡答的功能了。

以上所述是小編給大家介紹的詳解JavaEE使用過濾器實現(xiàn)用戶自動登錄 安全登錄 取消自動登錄黑用戶禁止登錄的相關(guān)知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 了解Java多線程的可見性與有序性

    了解Java多線程的可見性與有序性

    這篇文章主要介紹了了解Java多線程的可見性與有序性,在Java內(nèi)存模型中,允許編譯器和處理器對指令進行重排序,但是重排序過程不會影響到單線程程序的執(zhí)行,卻會影響到多線程并發(fā)執(zhí)行的正確性。,需要的朋友可以參考下
    2019-06-06
  • 在IntelliJ IDEA中創(chuàng)建和運行java/scala/spark程序的方法

    在IntelliJ IDEA中創(chuàng)建和運行java/scala/spark程序的方法

    這篇文章主要介紹了在IntelliJ IDEA中創(chuàng)建和運行java/scala/spark程序的教程,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • Spring?Boot?基于?SCRAM?認(rèn)證集成?Kafka?的過程詳解

    Spring?Boot?基于?SCRAM?認(rèn)證集成?Kafka?的過程詳解

    在本篇文章中,我們將探討如何在?Spring?Boot?應(yīng)用中集成?Kafka?并使用?SCRAM?認(rèn)證機制進行安全連接,并實現(xiàn)動態(tài)創(chuàng)建賬號、ACL?權(quán)限、Topic,以及生產(chǎn)者和消費者等操作,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Java Json字符串的雙引號(

    Java Json字符串的雙引號("")括號如何去掉

    這篇文章主要介紹了Java Json字符串的雙引號("")括號如何去掉?具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Spring中的事務(wù)管理實例詳解

    Spring中的事務(wù)管理實例詳解

    這篇文章主要介紹了Spring中的事務(wù)管理,以實例形式詳細分析了事務(wù)的概念與特性以及事物管理的具體用法,需要的朋友可以參考下
    2014-11-11
  • 用Java制作用戶登錄界面超詳細圖文教程

    用Java制作用戶登錄界面超詳細圖文教程

    很多人學(xué)習(xí)Java的第一個任務(wù)是使用Java設(shè)計客戶端登錄界面中,希望我的學(xué)習(xí)方法與總結(jié)能幫助到需要的朋友,這篇文章主要給大家介紹了關(guān)于用Java制作用戶登錄界面的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • 在SSM框架中將圖片上傳到數(shù)據(jù)庫中的實現(xiàn)代碼

    在SSM框架中將圖片上傳到數(shù)據(jù)庫中的實現(xiàn)代碼

    這篇文章主要介紹了在SSM框架中將圖片上傳到數(shù)據(jù)庫中的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Ubuntu 15下安裝JDK1.8教程

    Ubuntu 15下安裝JDK1.8教程

    這篇文章主要為大家詳細介紹了Ubuntu 15下JDK1.8安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • MyBatis映射文件resultMap元素中使用多個association的方法

    MyBatis映射文件resultMap元素中使用多個association的方法

    這篇文章主要介紹了MyBatis映射文件resultMap元素中使用多個association的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 基于java實現(xiàn)簡單發(fā)紅包功能

    基于java實現(xiàn)簡單發(fā)紅包功能

    這篇文章主要為大家詳細介紹了基于java實現(xiàn)簡單發(fā)紅包功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評論

五常市| 新建县| 运城市| 黑水县| 隆子县| 珲春市| 南昌市| 香港| 河北省| 招远市| 垣曲县| 壶关县| 绥芬河市| 同仁县| 稷山县| 略阳县| 新巴尔虎左旗| 池州市| 厦门市| 咸宁市| 建湖县| 新泰市| 璧山县| 岳普湖县| 海盐县| 西畴县| 新乐市| 富锦市| 昌吉市| 商城县| 白玉县| 抚松县| 岳西县| 霍城县| 达拉特旗| 如皋市| 桐城市| 固原市| 乾安县| 礼泉县| 邵武市|