Java 實現自動登陸


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <%--用戶信息驗證失敗,顯示錯誤信息--%>
    <c:if test="${not empty requestScope.msg}">
        <div class="form-group">
            <label for="username" class="col-sm-2 control-label"></label>
            <div class="col-sm-10">
                <font style="color: #f00; font-weight: bold;">${msg}</font>
            </div>
        </div>
    </c:if>

    <form action="${pageContext.request.contextPath}/autoLogin" method="post">
        <input type="text" name="username" placeholder="請輸入用戶名">
        <input type="password" name="password" placeholder="請輸入密碼">
        <input type="checkbox" name="autoLogin">
        <input type="submit" width="100" value="登錄">
    </form>
</body>
</html>

登陸表單頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
    <%--用戶信息驗證成功,顯示用戶名--%>
    <c:if test="${not empty loginUser}">
      ${loginUser.username}
    </c:if>
  </body>
</html>

登陸成功跳轉頁

package com.zjl.main;

import com.zjl.main.domain.User;
import com.zjl.main.service.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;


@WebServlet(name = "Test04Servlet")
public class Test04Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        // 獲取 request 參數
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String autoLogin = request.getParameter("autoLogin");

        // 用戶登陸信息驗證
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        UserService service = new UserService();
        User loginUser = null;
        try {
            loginUser = service.login(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        if (loginUser != null) {
            // 如果確認自動登陸,則將用戶名密碼封裝成一個字符串,添加在cookie中返回給客戶端
            if (autoLogin != null) {
                Cookie cookie = new Cookie("autoLoginCookie", username + "@" + password);
                cookie.setPath("/");
                cookie.setMaxAge(60*60);
                response.addCookie(cookie);
            }
            // 驗證成功,將用戶信息設置在session對象中
            request.getSession().setAttribute("loginUser", loginUser);
            // 重定向至index.jsp
            response.sendRedirect(request.getContextPath() + "/index.jsp");
        } else {
            // 驗證失敗,將錯誤信息設置在 request 中,轉發到login.jsp中
            request.setAttribute("msg", "用戶名與密碼不匹配");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       this.doPost(request, response);
    }
}
package com.zjl.main.filter;

import com.zjl.main.domain.User;
import com.zjl.main.service.UserService;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;

@WebFilter(filterName = "AutoLoginFilter")
public class AutoLoginFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        // 強轉
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        // 驗證 session 中是否存在此用戶
        User loginUser = (User) request.getSession().getAttribute("loginUser");

        if (loginUser != null) {
            chain.doFilter(request, response);
            return;
        }

        // 驗證是否包含自動登陸的cookie
        Cookie[] allCookie = request.getCookies();
        Cookie userCookie = null;
        if (allCookie != null) {
            for (Cookie c : allCookie) {
                if ("autoLoginCookie".equals(c.getName())) {
                    userCookie = c;
                    break;
                }
            }
        }

        if (userCookie == null) {
            chain.doFilter(request, response);
            return;
        }

        // 驗證cookie中信息是否正確
        String[] u = userCookie.getValue().split("@");
        String username = u[0];
        String password = u[1];
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        UserService service = new UserService();
        try {
            loginUser = service.login(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        if (loginUser == null) {
            chain.doFilter(request, response);
            return;
        }

        request.getSession().setAttribute("loginUser", loginUser);
        chain.doFilter(request, response);
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

過濾器

 <filter>
        <filter-name>AutoLoginFilter</filter-name>
        <filter-class>com.zjl.main.filter.AutoLoginFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>AutoLoginFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

在web.xml中註冊過濾器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章