过滤器案例: 登录验证(权限校验)

本文介绍了如何使用JavaWeb中的过滤器(Filter)进行登录验证,确保只有登录的用户才能访问特定资源。需求包括检查用户是否已登录,登录则放行,未登录则重定向到登录页面。详细内容涵盖登录界面、Servlet及过滤器的代码实现。

需求

1.访问项目的资源。验证其是否登录
2.如果登录了,则直接放行。
3.如果没有登录,则跳转到登录页面

代码实现

登录界面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <form action="treeServlet" method="post">
    账号:<input type="text" name="username"><br>
    密码:<input type="text" name="pass"><br>
    <input type="submit">
  </form>
  </body>
</html>

servlet

package com.bdit.servlet;

import com.bdit.sevice.TreeSevice;
import com.bdit.vo.Tree;
import com.mysql.cj.Session;


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

@WebServlet(urlPatterns = {"/treeServlet"})
public class TreeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session=req.getSession();
        session.removeAttribute("a");
        req.getRequestDispatcher("index.jsp").forward(req,resp);
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username=req.getParameter("username");
        String pass=req.getParameter("pass");
        TreeSevice sevice=new TreeSevice();
        //根据用户名和密码查询数据库是否有符合条件的数据
        Tree tree=sevice.find(username,pass);
        if(tree!=null&&tree.getUsername().equals(username)&&tree.getPass().equals(pass)){
            HttpSession session= req.getSession();
            session.setAttribute("a","ok");
            resp.sendRedirect("success.jsp");
        }else{
            resp.sendRedirect("error.jsp");
        }
    }
}

过滤器

package com.bdit.filter;

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

@WebFilter(urlPatterns = {"/safe/*"})
public class TreeFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("UTF-8");
        servletResponse.setContentType("test/html;charset=UTF-8");
        HttpServletRequest request= (HttpServletRequest) servletRequest;
        HttpServletResponse response= (HttpServletResponse) servletResponse;

        HttpSession se= request.getSession();
        Object session=request.getSession(false);
        if(session==null || se.getAttribute("a")==null){
            response.sendRedirect(request.getContextPath()+"/index.jsp");
        }else{
            filterChain.doFilter(request,response);
        }

    }
}

登录之后才能访问的页面
此页面路径:
在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h2>登录之后可以访问此页面</h2>
<%
    HttpSession session1= request.getSession();
    Object se=request.getSession();
    String a= (String) session1.getAttribute("a");
%>
<%=a%>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值