Filter实际应用--检查用户是否登录的过滤器

a.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>A</title>
</head>
<body>
   <h1>AAAAAA</h1>
<a href="list.jsp">return...</a>
</body>
</html>
b.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>B</title>
</head>
<body>
   <h1>BBBBB</h1>
<a href="list.jsp">return...</a>
</body>
</html>
c.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>C</title>
</head>
<body>
   <h1>CCCCCC</h1>
<a href="list.jsp">return...</a>
</body>
</html>
d.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>D</title>
</head>
<body>
   <h1>DDDDDD</h1>
<a href="list.jsp">return...</a>
</body>
</html>
list.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="a.jsp">AAA</a>
    <a href="b.jsp">BBB</a>
    <a href="c.jsp">CCC</a>
    <a href="d.jsp">DDD</a>

</body>
</html>
login.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>LOGIN</title>
</head>
<body>
   <form action="dologin.jsp" method="post">
       name:<input type="text" name="name">
       <input type="submit" value="submit">
   </form>
</body>
</html>
dologin.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <% Const.NAME=request.getParameter("name");%>
</body>
</html>
const:

package com.sa.util;

public class Const {
    public static  String NAME="";
    public static final String OKURL="/pages/a.jsp,/pages/list.jsp,/pages/login.jsp,/pages/dologin.jsp";
}

loginFilter:

package com.sa.filter;

import com.sa.util.Const;

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

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

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        //1.获取url
        ///1012/pages/a.jsp
        String uri=((HttpServletRequest)req).getRequestURI();
        //http://localhost:8080/1012/pages/a.jsp
        String url=((HttpServletRequest)req).getRequestURL().toString();
        ///pages/a.jsp
        String path=((HttpServletRequest) req).getServletPath();
        //System.out.println(uri);
        //System.out.println(url);
        //System.out.println(path);
        //2.首先检查url是否需要登录检查
        if(Const.OKURL.contains(path)){
           //包括,放行
            System.out.println(1);
            chain.doFilter(req, resp);
            return;
        }
        //3.需要登录检查的url是否已经登录
        if(!Const.NAME.equals("")&&Const.NAME !=null){
            //如果name不为空,则放行
            System.out.println(2);
            chain.doFilter(req, resp);
            return;
        }
        //4.如果没有登录,则需要重定向登录页
        System.out.println(3);
        ((HttpServletResponse)resp).sendRedirect("login.jsp");
    }

    public void init(FilterConfig config) throws ServletException {


    }

}

web.xml:

<?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_3_1.xsd"
         version="3.1">
    <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>com.sa.filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

功能描述:除了const中的OKURL之外,其他的所有访问都需要进行登录检查,如果没有登录,则重定向到login.jsp,如果已经登录,则可以访问。
开始测试:

①:进入a.jsp:


②:返回list.jsp:


③:尝试进入b.jsp,发现无法进入,直接重定向到login.jsp:


④:输入name,登录:


⑤:再次尝试登录b.jsp:








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值