servlet实现登录验证 filter实现请求验证

1 篇文章 0 订阅
1 篇文章 0 订阅

为了熟悉下filter,用servlet和filter实现了简单的登录和验证。servlet实现登录验证 filter实现请求验证。

1、整体结构如下:

废话不多说,直接上代码,

2、web.xml

<!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 xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
  <display-name>Archetype Created Web Application</display-name>

  <filter>
    <filter-name>FirstFilter</filter-name>
    <filter-class>com.zcj.filter.FirstFilter</filter-class>

    <init-param>
      <param-name>excludedPages</param-name>
      <param-value>/login,/index.jsp</param-value>
    </init-param>
  </filter>

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


  <servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.zcj.Servlet.LoginServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>


  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.zcj.Servlet.HelloServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>NiHaoServlet</servlet-name>
    <servlet-class>com.zcj.Servlet.NiHaoServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>NiHaoServlet</servlet-name>
    <url-pattern>/nihao</url-pattern>
  </servlet-mapping>

</web-app>

3、FirstFilter

package com.zcj.filter;

import org.apache.commons.lang3.StringUtils;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FirstFilter implements Filter {

    private static final String CONTENT_TYPE = "text/html; charset=UTF-8";
    private FilterConfig _filterConfig = null;

    private String excludedPages;
    private String[] excludedPageArray;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        _filterConfig = filterConfig;

        excludedPages = filterConfig.getInitParameter("excludedPages");
        if (StringUtils.isNotEmpty(excludedPages)) {
            excludedPageArray = excludedPages.split(",");
        }
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest rq = (HttpServletRequest) req;
        boolean isExcludedPage = false;
        response.setCharacterEncoding("UTF-8");
        for (String page : excludedPageArray) { //判断是否在过滤url之外
            if (rq.getServletPath().equals(page)) {
                isExcludedPage = true;
                break;
            }
        }
     if (isExcludedPage) { //在过滤url之外
        chain.doFilter(req, response);
    } else { //不在过滤url之外,判断登录
        HttpSession httpSession = rq.getSession();
        String userCode = String.valueOf( httpSession.getAttribute("userCode"));
        if ("null".equals(userCode)) {
            HttpServletRequest request = (HttpServletRequest)req;
            HttpServletResponse response1 = (HttpServletResponse)response;
            request.getRequestDispatcher("/index.jsp").forward(request,response1);
            return;
        } else {
            chain.doFilter(req, response);
        }
    }

        HttpServletRequest request = (HttpServletRequest) req;
        String ip = request.getRemoteAddr();
        String url = request.getRequestURL().toString();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = new Date();
        String time =sf.format(d);

        System.out.printf("%s %s 访问了 %s%n", time, ip, url);
        //chain.doFilter(request, response);
        return;
    }

    @Override
    public void destroy() {
        _filterConfig = null;
    }
}

4、servlet

package com.zcj.Servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class HelloServlet extends HttpServlet {

    private String message;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置响应内容类型
        resp.setContentType("text/html");
        resp.sendRedirect("/rab/hello.jsp");
    }

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

    @Override
    public void destroy() {
        super.destroy();
    }

    @Override
    public void init() throws ServletException {
        // 执行必需的初始化
        message = "ni hao";
    }
}
package com.zcj.Servlet;

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.io.PrintWriter;
import java.net.URLEncoder;

public class LoginServlet extends HttpServlet {

    private String message;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String userCode = req.getParameter("userCode");
        String pwd = req.getParameter("pwd");
        String msg = "" ;
        resp.setCharacterEncoding("UTF-8");
        if("admin" .equals(userCode) && "123".equals(pwd)){
            HttpSession session = req.getSession();
            session.setAttribute("userCode",userCode);
            session.setAttribute("pwd",pwd);
            resp.sendRedirect("/rab/main.jsp");
        }else{
            msg = URLEncoder.encode( "用户名或密码无效!","UTF-8");

            resp.sendRedirect("/rab/index.jsp?message="+msg);
        }
    }

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

    @Override
    public void destroy() {
        super.destroy();
    }

    @Override
    public void init() throws ServletException {
        // 执行必需的初始化
        message = "ni hao";
    }
}
package com.zcj.Servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class NiHaoServlet extends HttpServlet {

    private String message;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置响应内容类型
        resp.setContentType("text/html");
        resp.sendRedirect("/rab/nihao.jsp");
    }

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

    @Override
    public void destroy() {
        super.destroy();
    }

    @Override
    public void init() throws ServletException {
        // 执行必需的初始化
        message = "ni hao";
    }
}

4、jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page pageEncoding="utf-8" isELIgnored="false"%>
<html>
<head>
    <title>登录页面</title>
</head>
<body style="text-align: center">
<form action="/rab/login" method="get">
    <h2>登录系统</h2>
    用户名:<input type="text" id="userCode" name="userCode"><br />
    密码:<input type="password" id="pwd" name="pwd"><br />
    <span style="color: red">${param.message}</span>
    <button type="submit" >提交</button>
</form>
</body>
</html>
<%@ page pageEncoding="UTF-8"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>主页面</title>
</head>
<body style="text-align: center">
这是主页面!!!<br />
<a href="/rab/hello">去A页面</a>
<a href="/rab/nihao">去B页面</a>
</body>
</html>
<%@ page pageEncoding="UTF-8"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>主页面</title>
</head>
<body style="text-align: center">
hello<br />
</body>
</html>
<%@ page pageEncoding="UTF-8"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>主页面</title>
</head>
<body style="text-align: center">
你好<br />
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值