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

985

被折叠的 条评论
为什么被折叠?



