一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 詳解JavaEE使用過濾器實現登錄(用戶自動登錄 安全登錄 取消自動登錄黑用戶禁止登錄)

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

2020-05-01 13:22YX_blog JAVA教程

主要介紹用戶的自動登錄和取消自動登錄,以及實現一天自動登錄或者n天實現自動登錄,當用戶ip被加入到黑名單之后,直接利用過濾器返回一個警告頁面。接下來通過本文給大家介紹JavaEE使用過濾器實現登錄的相關知識,感興趣

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

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

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

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

前臺代碼:

前臺代碼是成功與否都在這個頁面顯示。用到的技術:jstl標簽的應用,session讀取值

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%@ 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>

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

servlet的實現代碼:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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)){//此處隨意寫寫,后面應該去servvice-->dao訪問數據庫
//這里假設登錄成功了,我們把信息存入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");//在過濾器中默認的設置是攔截重定向,轉發是內部直接轉發,不過過濾器,不好辦,但是只需要在web.xml中配置就可以了。
}else{
request.getSession().setAttribute("error", "1");
response.sendRedirect(request.getContextPath()+"/index.jsp");
}
}

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

安全登錄:

之前我們采用過動態導入來進行安全登錄,防止用戶進入項目之后,不用登錄,隨意輸入都可以進入界面,動態導入能夠實現這個功能,但是,采用過濾器更好。

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

代碼呈上:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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都需要輸入,太麻煩,我們采用過濾器實現;

代碼呈上:

?
1
2
3
4
5
6
7
8
9
10
11
<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");//設置發出去的編碼
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 設置為全局變量,</span><span style="font-size:18px;">
}</span>

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

web.xml代碼呈上:

?
1
2
3
4
5
6
7
8
<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查找,存在,去數據庫匹配,若匹配成功,就把session容器添加值。

代碼呈上:

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

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

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

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

黑名單用戶

黑名單用戶,不準登錄,直接告訴它結果

代碼呈上:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)){//在黑名單之內
System.out.println("set");
resp.getWriter().print("您屬于黑名單..<a href='"+req.getContextPath()+"/index.jsp'>返回</a>");
//返回也是不行的,因為index向服務器請求的時候就直接攔截了
}else{
chain.doFilter(req, resp);
}
}

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

代碼呈上:

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

?
1
2
3
4
5
6
7
public void init(FilterConfig arg0) throws ServletException {
//這里是黑名單列表,從數據庫中調取出來。這里只是簡單的模擬下
set.add("192.132.0.12");//這是黑IP,這個是從后臺數據庫拿到的。
set.add("localhost");
set.add("192.132.32.4");
set.add("127.0.0.1");
}

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

取消自動登錄

當一直自動登錄認為不安全,所以我們設置沒有自動登錄

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

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

代碼呈上:

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

上面這些就能實現這些簡答的功能了。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 小鸟酱视频在线观看 | 鸥美三级 | 97视频久久久 | 久久中文字幕综合不卡一二区 | 国产清纯91天堂在线观看 | 欧美日韩人成在线观看 | 10个免费货源网站 | 無码一区中文字幕少妇熟女H | 久久精品亚洲国产AV涩情 | 久久久96 | 色综合久久综合网欧美综合网 | 欧美男同猛男 videos 同性 | 国产经典一区二区三区蜜芽 | 女人和男人搞鸡 | 欧美交换乱理伦片120秒 | 麻豆视频免费在线播放 | pregnantsexxx临盆孕妇 | 久久久久久久国产精品视频 | 青青草国产一区二区三区 | 免费看一区二区三区 | 亚洲一级片在线播放 | 日韩在线一区二区三区 | 国产精品欧美在线观看 | 动漫a级片 | 蜜桃麻豆 | 色综合97天天综合网 | 日本丰满大乳乳奶 | 亚洲AV无码专区国产精品麻豆 | 67id人成观看免费 | 日本孕妇大胆孕交 | 青青青草免费 | 好大水好多好爽好硬好深视频 | 99久久免费国内精品 | 青草视频在线观看免费资源 | 99精品观看| 好奇害死猫在线观看 | 亚洲精品国精品久久99热 | 成人涩涩屋福利视频 | 波多野给衣一区二区三区 | 日本亚洲娇小与黑人tube | 日本一片免费观看高清完整 |