java--过滤器
来源:互联网 发布:bugs软件 编辑:程序博客网 时间:2024/06/06 19:04
CharacterFilter
package cn.hncu.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;/* * 过滤器开发: * 1.写一个类实现Filter接口 * 2.配置web.xml (配置<filter>和<filter-mapping>两个元素) * */public class CharacterFilter implements Filter{ private String charset; //过滤器的init在服务器一启动时就会执行。 //servlet如果配置了load-on-startup选项则也会在服务器启动 //时就执行初始化,否则只有在第一次访问该servlet时才会执行。 @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("CharacterFilter-init..."); this.charset=filterConfig.getInitParameter("charset"); } @Override//该方法在拦截到相应请求或响应时才会执行 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("CharacterFilter-doFilter...拦截请求");//拦截请求 //request.setCharacterEncoding("utf-8");//编码写死了 request.setCharacterEncoding(charset); //编码写活,让用户可配置(在web.xml中修改参数) chain.doFilter(request, response);//放行 System.out.println("CharacterFilter-doFilter...拦截响应");//拦截响应 response.setContentType("text/html;charset="+charset); } @Override public void destroy() { System.out.println("CharacterFilter-destory..."); }}
LoginSecureFilter
package cn.hncu.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginSecureFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("LoginSecureFilter-init..."); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("LoginSecureFilter-doFilter...拦截请求");//拦截请求 HttpServletRequest req=(HttpServletRequest) request; String name=(String) req.getSession().getAttribute("name"); if(name==null||name.trim().equals("")){ //踢到登录页面 //注意,重定向时路径中的第一个"/"是指Tomcat的根目录,因此这里必须加一个项目名。 ((HttpServletResponse)response).sendRedirect(req.getContextPath()+"/index.jsp"); } chain.doFilter(request, response);//放行 System.out.println("LoginSecureFilter-doFilter...拦截响应");//拦截响应 } @Override public void destroy() { }}
web.xml–配置Filter和Servlet
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name></display-name> <!-- 过滤器链中,这一段的配置顺序决定init的执行顺序 --> <filter> <filter-name>login</filter-name> <filter-class>cn.hncu.filter.LoginSecureFilter</filter-class> </filter> <filter> <filter-name>three</filter-name> <filter-class>cn.hncu.filter.CharacterFilter</filter-class> <init-param> <param-name>charset</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <!-- 拦截路径设置说明: 1. “/*” 表示拦截所有资源 2. “*.jsp” 表示拦截所有jsp页面的请求与响应 3. “/jsps/*.jsp” ※不能这样写,格式错误※ 4. “/jsps/*” 表示拦截jsps目录下的所有资源 5. “/LoginServlet” 表示只拦截映射路径为“/LoginServlet”的这一个servlet 6. “login” 表示只拦截名“login”的servlet(可以把jsp页面配置成serlvet) --> <!-- 过滤器链中,这一段的配置顺序决定拦截顺序(过滤器的过滤顺序) --> <filter-mapping> <filter-name>three</filter-name> <!-- 指定拦截访问后台的哪些资源(servlet,jsp,jpg文件等), '/*'代表所有资源 --> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>cn.hncu.servlet.LoginServlet</servlet-class> </servlet> <servlet> <servlet-name>BuyServlet1</servlet-name> <servlet-class>cn.hncu.servlet.BuyServlet1</servlet-class> </servlet> <servlet> <servlet-name>BuyServlet2</servlet-name> <servlet-class>cn.hncu.servlet.BuyServlet2</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>BuyServlet1</servlet-name> <url-pattern>/buy/buy1</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>BuyServlet2</servlet-name> <url-pattern>/buy/buy2</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
初始化顺序
主页面index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> </head> <body> <h2>这是主页...OKOK</h2> <c:url value="/login"/> <form action='<c:url value="/login"/>' method="post"> 姓名:<input type="text" name="name"/><br/> <input type="submit" value="提交"> </form> <a href='<c:url value="/buy/buy1"/>'>商品1</a> <a href='<c:url value="/buy/buy2"/>'>商品2</a> <a href='<c:url value="/jsps/a.jsp"/>'>欢迎</a> </body></html>
/jsps/wel.jsp–登录成功页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> </head> <body> <h2>这是欢迎页面</h2> 欢迎你,${name}! </body></html>
/jsps/a.jsp–欢迎页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> </head> <body> <h2>很多贵宾才能看到的商品</h2> 欢迎你,${name}! <br/> <img src="<c:url value='/imgs/1.png'/>" /> </body></html>
LoginServlet–登录,未被LoginSecureFilter拦截
package cn.hncu.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name=request.getParameter("name"); //....//省略若干行代码(调用service及dao层,到数据库中验证身份) request.getSession().setAttribute("name", name);//这里假设验证成功 System.out.println(request.getContextPath()+"/jsps/wel.jsp"); response.sendRedirect(request.getContextPath()+"/jsps/wel.jsp");// response.sendRedirect(request.getContextPath()+"/index.jsp"); }}
BuyServlet1–BuyServlet2同(映射路径为”/buy/buy1”和“/buy/buy2”)
package cn.hncu.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class BuyServlet1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); PrintWriter p=response.getWriter(); p.print(name+"访问了buy1"); p.print("进行购物---调用service层的相应逻辑");//要求必须登录过后才能访问该模块 }}
第一次访问主页的filter拦截
未登录时访问超链接 欢迎
登陆
0 0
- java过滤器
- java 过滤器
- java 过滤器
- java 过滤器
- Java过滤器
- java 过滤器
- java过滤器
- JAVA过滤器
- java过滤器
- Java过滤器
- Java-过滤器
- java 过滤器
- java过滤器
- Java过滤器
- java 过滤器
- java 过滤器
- java过滤器
- java过滤器
- Android类加载机制学习
- 由HITCON 2016一道web聊一聊php反序列化漏洞
- Android Studio常用快捷键(提取全局变量等)
- Windows(gitlab为例)系统下git常用操作
- yii2 实现简单的留言板组件
- java--过滤器
- Binary Tree Paths ---LeetCode
- 区块链开源项目Ripple四、共识(1)
- python第一课笔记
- log4j.properties 详解与配置步骤
- yii2 实现图片轮播组件
- Java之设计模式六大原则(2):里氏替换原则
- TCP连接的建立(三次握手)和释放(四次握手)
- GridView中实现CheckBoxList选中更新数据库