国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

java—驗(yàn)證用戶是否已經(jīng)登錄與實(shí)現(xiàn)自動(dòng)登錄 (50)

2019-11-14 23:57:45
字體:
供稿:網(wǎng)友
java—驗(yàn)證用戶是否已經(jīng)登錄與實(shí)現(xiàn)自動(dòng)登錄 (50)

驗(yàn)證用戶是否已經(jīng)登錄

package cn.hongxin.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.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.Httpsession;

public class LoginFilter implements Filter{

public void init(FilterConfig filterConfig) throws ServletException {

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

//將request強(qiáng)轉(zhuǎn)成htt...

HttpServletRequest req = (HttpServletRequest) request;

//獲取session

HttpSession ss = req.getSession();

//從session中獲取user

if(ss.getAttribute("user")==null){

System.err.

req.getSession().setAttribute("msg", "請(qǐng)你先登錄");

//重定向到登錄

HttpServletResponse resp = (HttpServletResponse) response;

resp.sendRedirect(req.getContextPath()+"/index.jsp");[W2]

}else{

//放行

chain.doFilter(request, response);

}

}

public void destroy() {

}

}

配置到web.xml中且對(duì)jsps/*進(jìn)行過慮:

<filter>

<filter-name>login</filter-name>

<filter-class>cn.itcast.filter.LoginFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>login</filter-name>

<url-pattern>/jsps/*</url-pattern>

<url-pattern>/views/*</url-pattern>

</filter-mapping>


實(shí)現(xiàn)自動(dòng)登錄

自動(dòng)登錄,是為了幫助用戶多次使用這個(gè)網(wǎng)頁時(shí),不用再次輸入用戶名和密碼就可以登錄。

是指用戶將用戶的登錄信息,人,保存到本地的文件中Cookie中。

Name,value – 聲明時(shí) new Cookie(key,value);

Path - 默認(rèn)值,即為當(dāng)前保存cookie的這個(gè)serlvet所在的路徑。

如果Cookie在這樣的路徑:http://loclhost:8080/project/abc/AServlet

則Cookie的路徑為: http://loclhost/project/abc

則說明:

所在在http://loclhost/project/abc目錄下的servlet才可以讀取這個(gè)cookie的值。

如果:

保存Cookie類:http://loclhost:8080/project/a/b/AServlet

則Cookie的默認(rèn)path為;

http://loclhost/project/a/b

第一步:開發(fā)一個(gè)登錄頁面

<c:choose>

<c:when test="${empty sessionScope.name}">

<form name="x" method="post" action="<c:url value='/LoginServlet'/>">

Name:<input type="text" name="name"/><br/>

auto:

<input type="radio" name="auto" value="-1">不自動(dòng)登錄

<br/>

<input type="radio" name="auto" value="1">1天<br/>

<input type="radio" name="auto" value="7">1周<br/>

<input type="submit"/>

</form>

</c:when>

<c:otherwise>

你已經(jīng)登錄了:${name}<br/>

<a href="<c:url value='/LoginServlet'/>">退出</a>

</c:otherwise>

</c:choose>

第二步:成功保存cookie

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//接收用戶姓名

String name = request.getParameter("name");

String auto = request.getParameter("auto");

//將用戶信息放到session

request.getSession().setAttribute("name",name);

//判斷auto是否是-1

if(!auto.equals("-1")){

int day = Integer.parseInt(auto);//1|7

int seconds = 60*60*24*day;

//聲明cookie

Cookie c = new Cookie("autoLogin",name);

c.setMaxAge(seconds);

c.setPath(request.getContextPath());

//保存cookie

response.addCookie(c);

}

}

第三步:要求訪問本網(wǎng)點(diǎn)中任何一個(gè)頁面都應(yīng)該實(shí)現(xiàn)自動(dòng)登錄

寫一個(gè)過慮器,對(duì)所有url=/*進(jìn)行過慮。在doFilter中讀取所有cookie。是否存在名稱為autoLogin的名稱cookie。

永遠(yuǎn)都放行。

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

//在這兒讀取cookie

HttpServletRequest req = (HttpServletRequest) request;

//獲取所的有cookie

Cookie[] cs = req.getCookies();

if(cs!=null){

for(Cookie c:cs){

if(c.getName().equals("autoLogin")){//如果存在自動(dòng)登錄的cookie

String value = c.getValue();//用戶名稱

//登錄成功是指

req.getSession().setAttribute("name", value);

break;

}

}

}

//不管是否自動(dòng)登錄成

chain.doFilter(request, response);

}

第四涉:配置到web.xml中對(duì)所有url=/*

<filter>

<filter-name>auto</filter-name>

<filter-class>cn.itcast.filter.AutoFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>auto</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

第五步:開發(fā)退出

System.err.println("用戶退出");

//刪除整個(gè)session

request.getSession().invalidate();

Cookie c = new Cookie("autoLogin", "ddd");

c.setMaxAge(0);

c.setPath(request.getContextPath());

response.addCookie(c);

// request.getSession().removeAttribute("name");

response.sendRedirect(request.getContextPath()+"/index.jsp");

第六步:優(yōu)化代碼

由于用戶在做手工登錄時(shí),也會(huì)進(jìn)入AutoFiilter的doFilter方法,且讀取所有Cookie遍歷一次。而這次遍歷對(duì)用戶來說是多余。

所以應(yīng)該將LoginServet這個(gè)url在doFiler中不過過慮。

且對(duì)退出也不能自動(dòng)登錄。

代碼下載:http://pan.baidu.com/s/1mgnAfLQ


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 枣强县| 绵阳市| 贺兰县| 腾冲县| 榕江县| 洛阳市| 拜城县| 沽源县| 桓台县| 休宁县| 天全县| 澳门| 东宁县| 陆河县| 淄博市| 卢龙县| 黄浦区| 荆门市| 巴彦淖尔市| 彰武县| 喜德县| 梨树县| 嘉禾县| 山阳县| 呼伦贝尔市| 南川市| 麦盖提县| 榆社县| 吉首市| 永靖县| 区。| 思茅市| 英德市| 南昌市| 临西县| 都匀市| 庄浪县| 许昌市| 阿拉善左旗| 岳阳县| 云林县|