java 字符过滤器_Java Web---登录验证和字符编码过滤器

本文介绍了Java Web中的过滤器技术,包括如何创建Filter、Filter的运行流程。重点讲解了字符编码过滤器CharacterFilter的实现,用于设置请求和响应的字符编码。同时,展示了登录验证过滤器LoginFilter的代码,该过滤器用于检查用户是否已登录,未登录时重定向到首页。
摘要由CSDN通过智能技术生成

什么是过滤器?

在Java Web中,过滤器即Filter。Servlet API中提供了一个Filter接口(javax.servlet.Filter)。开发web应用时,假设编写的Java类实现了这个接口,则把这个Java类称之为过滤器Filter。

通过Filter技术,开发者能够实现用户在訪问某个目标资源之前,对訪问的请求和响应进行拦截。简单说。就是能够实现web容器对某资源的訪问前截获进行相关的处理,还能够在某资源向web容器返回响应前进行截获进行处理。

创建一个Filter的步骤

1.创建一个Filter处理类(实现javax.servlet.Filter接口)

2.在web.xml文件里配置Filter

Filter运行流程

1.Filter对用户的请求进行预处理

2.处理好后将请求交给Servlet处理并生成响应

3.最后Filter再对server响应进行后处理

字符编码过滤器

CharacterFilter.java

package org.LabReserve.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;

public class CharacterFilter implements Filter { //实现Filter接口

private String character; //保存字符编码的类型

@Override

public void destroy() { //在Filter销毁前。完毕某些资源的回收

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,

FilterChain filterChain) throws IOException, ServletException {

servletRequest.setCharacterEncoding("utf-8"); //能够直接设置编码

servletResponse.setCharacterEncoding(character); //也能够读取初始化的參数character

filterChain.doFilter(servletRequest, servletResponse); //转到下一个过滤器

}

@Override

public void init(FilterConfig fc) throws ServletException { //完毕Filter的初始化

//读取web.xml中Filter配置的初始化參数

character = fc.getInitParameter("character");

}

}

web.xml文件里的配置

CharacterFilter

org.LabReserve.filter.CharacterFilter

character

utf-8

CharacterFilter

/*

登录验证过滤器

LoginFilter.java

package org.LabReserve.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;

import javax.servlet.http.HttpSession;

public class LoginFilter implements Filter {

@Override

public void destroy() {

}

@Override

public void doFilter(ServletRequest servletRequest,

ServletResponse servletResponse, FilterChain filterChain)

throws IOException, ServletException {

// 转换为HTTP请求对象

HttpServletRequest request = (HttpServletRequest) servletRequest;

// 转化为HTTP响应对象

HttpServletResponse response = (HttpServletResponse) servletResponse;

// 获得请求相应的session对象

HttpSession session = request.getSession();

// 获得用户请求的URI

String path = request.getRequestURI();

// 不用验证登录过滤的页面

String[] noCheckPages = { "index.jsp","findPassword.jsp",

"LoginServlet","UserServlet",

"css","images","js"};

// int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。没找到则返回-1

for (int i = 0; i < noCheckPages.length; ++i) {

if (path.indexOf(noCheckPages[i]) > -1) {

// 转到下一个过滤器

filterChain.doFilter(servletRequest, servletResponse);

return; //不再过滤,防止页面重定向循环

}

}

// 假设session为null,说明用户是第一次訪问

if (session.getAttribute("userId") != null

|| session.getAttribute("teacherId") != null

|| session.getAttribute("adminId") != null) {

// 转到下一个过滤器

filterChain.doFilter(request, response);

} else {

// 又一次定向到首页

response.sendRedirect("index.jsp");

return; //不再过滤,防止页面重定向循环

}

}

@Override

public void init(FilterConfig arg0) throws ServletException {

}

}

web.xml文件配置

LoginFilter

org.LabReserve.filter.LoginFilter

LoginFilter

/*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值