javaweb学习23:Filter实现权限拦截


javaweb学习23:Filter实现权限拦截

  • 监听器:GUI编程中经常使用;

  • 过滤器:重点理解过滤器;

 

  • 需求:

    • 用户登录后才能进入主页!

    • 用户注销后就不能进入主页了!

    • 核心:Session的用法;

 

  • 思路:

    • 1,用户登录之后,向Session中放入用户的数据;

    • 2,进入主页的时候,要判断用户是否已经登录;要求:过滤器实现;

 

 

  • 代码案例:login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
       <title>Titletitle>
    head>
    <body>
    ?
    <form action="/servlet/login" method="post">
      用户名:<input type="text" name="username">
       <br>
       <input type="submit">
    form>
    ?
    body>
    html>
  • 代码案例:success.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
       <title>成功页面title>
    head>
    <body>
    <%--
    <%
       Object user_session = request.getSession().getAttribute("USER_SESSION");
       if(user_session==null){
           response.sendRedirect("/login.jsp");
      }
    %>--%>
    ?
    ?
    <h1>主页h1>
    ?
    <p>
       <a href="/servlet/logout">注销a>
    p>
    ?
    body>
    html>
  • 代码案例:error.sjp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
       <title>错误title>
    head>
    <body>
    ?
    <h1>错误h1>
    ?
    <p>
       <a href="/login.jsp">返回首页a>
    p>
    ?
    body>
    html>
    ?
  • 代码案例:登录Servlet

    public class LoginServlet extends HttpServlet {
    ?
       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           //获取前端请求的参数:
           String username = req.getParameter("username");
           if(username.equals("admin")){//登录成功
               req.getSession().setAttribute("USER_SESSION",req.getSession().getId());
               //登录成功之后,重定向到成功页面
               resp.sendRedirect("/sys/success.jsp");
          }else{//登录失败
    ?
               resp.sendRedirect("/error.jsp");
    ?
          }
    ?
    ?
      }
    ?
       @Override
       protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           doGet(req, resp);
      }
    }
    ?
    ?
  • 代码案例:退出Servlet

    ?
    public class LogoutServlet  extends HttpServlet {
    ?
       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ?
           //移除登录的那个session即可实现推出操作:
           Object user_session = req.getSession().getAttribute("USER_SESSION");
           if(user_session !=null ){
               req.getSession().removeAttribute("USER_SESSION");
               resp.sendRedirect("/login.jsp");
          }else{
               resp.sendRedirect("/login.jsp");
          }
    ?
      }
    ?
       @Override
       protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           doGet(req, resp);
      }
    }
  • 代码案例:过滤器

    ?
    /**
    * 过滤器
    */
    public class SysFilter implements Filter {
    ?
    ?
       public void init(FilterConfig filterConfig) throws ServletException {
    ?
      }
    ?
       public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
           System.out.println("开始处理...");
           HttpServletRequest req=(HttpServletRequest)request;
           HttpServletResponse resp=(HttpServletResponse)response;
           Object username = req.getSession().getAttribute("USER_SESSION");
    ?
           if(username == null){
               resp.sendRedirect("/error.jsp");
          }
    ?
           chain.doFilter(request,response);//放行
           System.out.println("结束处理...");
      }
    ?
       public void destroy() {
    ?
      }
    }
    ?
  • 代码案例: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_4_0.xsd"
            version="4.0">
       
    ?
       
       <servlet>
           <servlet-name>loginServletservlet-name>
           <servlet-class>com.servlet.LoginServletservlet-class>
       servlet>
    ?
       <servlet-mapping>
           <servlet-name>loginServletservlet-name>
           <url-pattern>/servlet/loginurl-pattern>
       servlet-mapping>
    ?
    ?
       
       <servlet>
           <servlet-name>logoutServletservlet-name>
           <servlet-class>com.servlet.LogoutServletservlet-class>
       servlet>
    ?
       <servlet-mapping>
           <servlet-name>logoutServletservlet-name>
           <url-pattern>/servlet/logouturl-pattern>
       servlet-mapping>
    ?
    ?
       
       <filter>
           <filter-name>SysFilterfilter-name>
           <filter-class>com.lesson.demo01.SysFilterfilter-class>
       filter>
    ?
       <filter-mapping>
           <filter-name>SysFilterfilter-name>
           
           <url-pattern>/sys/*url-pattern>
       filter-mapping>
    ?
    ?
    web-app>
    ?