程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 詳解JavaEE應用過濾器完成登錄(用戶主動登錄 平安登錄 撤消主動登錄黑用戶制止登錄)

詳解JavaEE應用過濾器完成登錄(用戶主動登錄 平安登錄 撤消主動登錄黑用戶制止登錄)

編輯:關於JAVA

詳解JavaEE應用過濾器完成登錄(用戶主動登錄 平安登錄 撤消主動登錄黑用戶制止登錄)。本站提示廣大學習愛好者:(詳解JavaEE應用過濾器完成登錄(用戶主動登錄 平安登錄 撤消主動登錄黑用戶制止登錄))文章只能為提供參考,不一定能成為您想要的結果。以下是詳解JavaEE應用過濾器完成登錄(用戶主動登錄 平安登錄 撤消主動登錄黑用戶制止登錄)正文


在我們生涯中,關於賬戶的主動登錄曾經很罕見了,所以應用過濾器完成這個功效。

重要引見用戶的主動登錄和撤消主動登錄,和完成一天主動登錄或許n天完成主動登錄,當用戶ip被參加到黑名單以後,直接應用過濾器前往一個正告頁面。

過濾器的功效很是壯大,我們只須要在寫好的前台後servlet以後停止添加便可以完成這個功效

Ps:這個僅僅只是一個演示罷了,外面的拜訪數據庫的部門,本身隨便模仿了下,重要是凸起完成主動登錄的功效。

前台代碼:

前台代碼是勝利與否都在這個頁面顯示。用到的技巧:jstl標簽的運用,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的完成代碼:

和之前的代碼一樣,只擔任和前台交互便可:外面用到的技巧有url編碼,值存在cookie外面,存在session外面,頁面跳轉(轉發)

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這解釋這是沒有登錄的,直接踢回登錄界面,否,則放行

代碼呈上:

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都須要輸出,太費事,我們采取過濾器完成;

代碼呈上:

<span >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 >haracter 設置為全局變量,</span><span > 
}</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查找,存在,去數據庫婚配,若婚配勝利,就把session容器添加值。

代碼呈上:

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);//必定要放走哦。。 
} 

黑名單用戶

黑名單用戶,禁絕登錄,直接告知它成果

代碼呈上:

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,效力很高。

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"); 
}

撤消主動登錄

當一向主動登錄以為不平安,所以我們設置沒有主動登錄

之前我們曉得,主動登錄靠的是cookie外面存的技巧,所以這裡我們只須要將cookie刪除便可以了

由於撤消主動登錄是超鏈接,所以寫的是servlet.

代碼呈上:

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應用過濾器完成用戶主動登錄 平安登錄 撤消主動登錄黑用戶制止登錄的相干常識,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved