通过过滤器实现完整的网页登录过程

框架

只有拿到门票的用户才能登录成功,注销时没收门票

在这里插入图片描述

Filter

作用:

处理中文乱码
登录验证….
加在服务器和servlet之间,用于过滤请求和响应;
在这里插入图片描述

导包

在这里插入图片描述

具体代码

登录页面index.jsp

<html>
<body>
<h2>登录页面</h2>
<div style="text-align:center">
    <%--${pageContext.request.contextPath}表示当前项目web路径--%>
    <%--method="post"设置请求方式--%>
    <form action="${pageContext.request.contextPath}/login" method="post">
        <%@ page pageEncoding="utf-8"%>
        用户名:<input type="text" name="username"> <br>
        密码:<input type="password" name="password"><br>

        <input type="submit">
    </form>
</div>

</body>
</html>

error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>错误</title>
</head>
<body>
<h2>用户名不存在或密码错误!</h2>
<a href="/s1/index.jsp">返回登录页面</a>

</body>
</html>

success.jsp

success.jsp放在web/sys/
在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>某页面</title>
</head>
<body>
<h1>主页</h1>

<h2 登录成功 style="text-align:center"></h2>
<%--设置按钮--%>
<a href="../logout">注销账户</a>
</body>
</html>

登录Servlet Login

package com.tl.login;

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

/**
 * @author tl
 *  实现页面登录功能:只有输入正确密码才能登录成功并拿到门票,
 * 否则重定向到error.jsp页面
 */
public class Login extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String username=req.getParameter("username");
        String password=req.getParameter("password");
        if(username.equals("admin")&&password.equals("123456")){
            req.getSession().setAttribute(Constant.name,req.getSession().getId());
            resp.sendRedirect("/s1/sys/success.jsp");
        }
        else {
            resp.sendRedirect("/s1/error.jsp");
        }
    }

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

过滤器LoginFilter

package com.tl.login;


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

/**
 * @author tl
 * 过滤器 过滤没有拿到门票的请求,响应它们到登录页面
 */
public class LoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req=(HttpServletRequest) request;
        HttpServletResponse resp=(HttpServletResponse) response;

        if(req.getSession().getAttribute(Constant.name)==null){
            resp.sendRedirect("/s1/index.jsp");
        }
        //通行
        chain.doFilter(request,response);
    }

    @Override
    public void destroy() {

    }
}

注销 Logout

package com.tl.login;

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

/**
 * @author tl
 * 登录页面后可以注销登录 注销时调用该类
 * 将该用户的门票没收
 */
public class Logout extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        if(req.getSession().getAttribute(Constant.name)!=null){
        //没收门票
            req.getSession().removeAttribute(Constant.name);
            resp.sendRedirect("/s1/index.jsp");
        }
        else{
            resp.sendRedirect("/s1/index.jsp");
        }
    }

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

常数类 Constant

package com.tl.login;

/**
 * @author tl
 * 在这里定义常数
 */
public class Constant {
    static String name="USER_NAME";

}

注册 web.xml

通过过滤器过滤/s1/sys/*网页的请求和响应

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

    <servlet>
        <servlet-name>Login</servlet-name>
        <servlet-class>com.tl.login.Login</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>Logout</servlet-name>
        <servlet-class>com.tl.login.Logout</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Logout</servlet-name>
        <url-pattern>/logout</url-pattern>
    </servlet-mapping>


    <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>com.tl.login.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>/sys/*</url-pattern>
    </filter-mapping>

</web-app>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值