Javaweb-Filter实现拦截权限问题
Filter实现拦截权限问题
1. 编写注册表
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login</title>
</head>
<body>
<form action="/servlet/login" method="post">
<input type="text" name="username">
<input type="submit">
</form>
</body>
</html>
2.servletlogin编写来判断是否注册成功,分别重定向到成功和失败页面
package com.wang.servlet;
import javax.servlet.Filter;
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 servletlogin extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//得到jsp里的username
String username = req.getParameter("username");
if(username.equals("admin"))
{
req.getSession().setAttribute("USERNAME",req.getSession().getId());
resp.sendRedirect("/fikter/succsee.jsp");
}
else {
resp.sendRedirect("/fikter/fail.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
3.编写servletloginout注销用户session,重新注册
package com.wang.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 servletloginout extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object username = req.getSession().getAttribute("USERNAME");
if(username!=null)
{
req.getSession().removeAttribute("USERNAME");
resp.sendRedirect("/fikter/login.jsp");
}
else {
resp.sendRedirect("/fikter/login.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
4.编写success和fail的JSP页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>success</title>
</head>
<body>
<h1>succsee</h1>
<h3><a href="/servlet/loginout">注销</a></h3>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>fail</title>
</head>
<body>
<h1>fail</h1>
<h3><a href="login.jsp">返回登录页面</a></h3>
</body>
</html>
5.编写映射
<?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>servlet</servlet-name>
<servlet-class>com.wang.servlet.showservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/servlet/show</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.wang.servlet.servletlogin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/servlet/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>loginout</servlet-name>
<servlet-class>com.wang.servlet.servletloginout</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginout</servlet-name>
<url-pattern>/servlet/loginout</url-pattern>
</servlet-mapping>
<filter>
<filter-name>fiter</filter-name>
<filter-class>com.wang.fiter.chfiter</filter-class>
</filter>
<filter-mapping>
<filter-name>fiter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.wang.listener.onlinelistener</listener-class>
</listener>
<filter>
<filter-name>fikter</filter-name>
<filter-class>com.wang.fiter.servletfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>fikter</filter-name>
<url-pattern>/fikter/succsee.jsp</url-pattern>
</filter-mapping>
</web-app>
6.过滤器编写
目的是过滤掉用户名错误的用户,重新注册,与JSP分离
package com.wang.fiter;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class servletfilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void destroy() {
Filter.super.destroy();
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) servletRequest;
HttpServletResponse response=(HttpServletResponse) servletResponse;
Object username = request.getSession().getAttribute("USERNAME");
if(username==null)
{
response.sendRedirect("/fikter/fail.jsp");
}
filterChain.doFilter(servletRequest,servletResponse);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?