過濾器實慄 登錄檢測

項目結構

![](https://melovemingming-1253878077.cos.ap-chengdu.myqcloud.com/blog-image/2019/03/2019-03-17%2004-56-15%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png
)

代碼如下

登錄servlet

package com.ming.servlrt;


import com.ming.factory.DAOFactory;
import com.ming.vo.User;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String path = "login.jsp";
        // 接收userid內容
        String userid = req.getParameter("userid");
        // 接收userpass內容
        String userpadd = req.getParameter("userpass");
        // 保存返回信息
        List<String> info = new ArrayList<String>();
        if(userid == null || "".equals(userid)){
            info.add("用戶id不能爲空");
        }
        if(userpadd == null || "".equals(userpadd)){
            info.add("密碼不能爲空");
        }
        // 報錯信息爲0進行驗證
        if(info.size() == 0){
            User user = new User();
            user.setUserid(userid);
            user.setPassword(userpadd);
            try{
                if(DAOFactory.getIuserDAOInstance().findLogin(user)){
                    info.add("登錄成功!" + user.getName());
                    // 增加session會話
                    HttpSession session = req.getSession();
                    session.setAttribute("id", userid);
                }else{
                    info.add("登錄失敗");
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        // 使用服務器端跳轉, 保存數據
        req.setAttribute("info", info);
        req.getRequestDispatcher(path).forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

對於登錄的servlet增加了session

過濾器如下

package com.ming.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;

// 首頁過濾器
public class LoginFile implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 轉型 因爲默認的ServletRequest中未提供相關的方法,需要向下轉型
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        // 獲取到session
        HttpSession session = request.getSession();
        // 判斷登錄
        if(session.getAttribute("id") != null){
            // 已經登錄
            filterChain.doFilter(servletRequest, servletResponse);
        }else{
            // 跳轉登錄頁登錄
            request.getRequestDispatcher("login.jsp").forward(servletRequest, servletResponse);
        }
    }

    @Override
    public void destroy() {

    }
}

配置文件如下

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
    <filter>
        <filter-name>LoginFile</filter-name>
        <filter-class>com.ming.filter.LoginFile</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LoginFile</filter-name>
        <url-pattern>/index.jsp</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.ming.servlrt.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/loginServlet</url-pattern>
    </servlet-mapping>
</web-app>

jsp文件如下

涉及 前端的js驗證
採用攔截click事件

<%@ page import="java.util.List" %>
<%@ page import="java.util.Iterator" %><%--
  Created by IntelliJ IDEA.
  User: ming
  Date: 19-3-16
  Time: 下午11:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>用戶登錄程序</h2>
<%
    List<String> info = (List<String>)request.getAttribute("info");
    if(info != null){
        Iterator<String> iterator = info.iterator();
        while(iterator.hasNext()){
            %>
                <h4><%=iterator.next()%></h4>
            <%
        }
    }
%>
<form action="loginServlet" method="post">
    用戶id <input type="text" name="userid" id="uname"/>
    密碼 <input type="password" name="userpass" id="password"/>
    <input type="submit" value="登錄" id="submit"/>
    <input type="reset" value="重置"/>
</form>
<script>
    let submit = document.getElementById("submit");
    submit.onclick = (event) => {
        let uname = document.getElementById("uname").value;
        let password = document.getElementById("password").value;
        if(!(/^\w{1,15}/.test(uname))){
            alert("用戶id爲5-15位");
            return false;
        }

        if(!(/^\w{1,15}/.test(password))){
            alert("密碼必須爲5-15位");
            return false;
        }
        return true;
    }
</script>
</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章