• 渚漪Day21——JavaWeb 11【Filter实现权限拦截】


    Filter实现权限拦截

    页面

    • 登录页面 login.jsp
    • 登录成功页面 /sys/success.jsp
    • 登录失败页面 error.jsp

    功能

    输入用户名正确则登录成功进入 /sys/success.jsp

    否则进入 error.jsp

    利用session判断是否处于登录状态,有登录权限

    若不处于则即便输入/sys/success.jsp 过滤器拦截跳转error.jsp

    代码

    JSP

    login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登录</title>
    </head>
    <body>
        <form action="servlet/login" method="post">
            <input type="text" name="username">
            <input type="submit">
        </form>
    
    </body>
    </html>
    

    success.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>主页</title>
    </head>
    <body>
        <h1>成功进入主页</h1>
    
        <p><a href="/servlet/logout">注销</a></p>
    </body>
    </html>
    

    error.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>error</title>
    </head>
    <body>
        <h1>登录失败</h1>
        <p><a href="/servlet/logout">返回首页</a></p>
    </body>
    </html>
    

    Servlet

    login.java

    package servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class login extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            String username = req.getParameter("username");
            System.out.println(username);
            req.getSession().setAttribute("user_session",req.getSession().getId());
            if(username.equals("admin")){
                resp.sendRedirect("/sys/success.jsp");
            }
            else{
                resp.sendRedirect("/error.jsp");
            }
    
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    

    logout.java

    package servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class logout extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            Object user_session = req.getSession().getAttribute("user_session");
    
            if(user_session!=null){
               // System.out.println(user_session);
                req.getSession().removeAttribute("user_session");
            }
            resp.sendRedirect("/login.jsp");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    

    Filter

    sysFiter.java

    package Filter;
    
    import javax.servlet.*;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class SysFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    
            HttpServletRequest req = (HttpServletRequest) servletRequest;
            HttpServletResponse resp = (HttpServletResponse) servletResponse;
    
            if(req.getSession().getAttribute("user_session")==null)
            {
                resp.sendRedirect("/error.jsp");
            }
    
    
            filterChain.doFilter(servletRequest, servletResponse);
    
        }
    
        @Override
        public void destroy() {
    
        }
    }
    

    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_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>login</servlet-name>
            <servlet-class>servlet.login</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>login</servlet-name>
            <url-pattern>/servlet/login</url-pattern>
        </servlet-mapping>
    
        <servlet>
            <servlet-name>logout</servlet-name>
            <servlet-class>servlet.logout</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>logout</servlet-name>
            <url-pattern>/servlet/logout</url-pattern>
        </servlet-mapping>
    
        <filter>
            <filter-name>SysFilter</filter-name>
            <filter-class>Filter.SysFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>SysFilter</filter-name>
            <url-pattern>/sys/*</url-pattern>
        </filter-mapping>
    </web-app>
    
  • 相关阅读:
    day04-交互、格式化输出及基本运算符
    day03-执行python方式、变量及数据类型简介
    day02-操作系统、编程语言分类及python安装
    day01-编程与计算机组成原理
    Appium测试环境搭建实践
    Windows环境下多线程编程原理与应用读书笔记(3)————Windows环境中的多线程实现(3)
    Windows环境下多线程编程原理与应用读书笔记(3)————Windows环境中的多线程实现(2)
    Windows环境下多线程编程原理与应用读书笔记(3)————Windows环境中的多线程实现(1)
    Windows环境下多线程编程原理与应用读书笔记(2)————面向对象技术
    Windows环境下多线程编程原理与应用读书笔记(1)————基本概念
  • 原文地址:https://www.cnblogs.com/ijuysama/p/12824996.html
Copyright © 2020-2023  润新知